1.模糊查询
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
if (StringUtils.isNotEmpty(houseViewSearchDTO.getKeyword())) {
queryBuilder.must(QueryBuilders.matchPhraseQuery("houseName", "*" + houseViewSearchDTO.getKeyword() + "*"));
}
2.数组IN查询
queryBuilder.must(QueryBuilders.termsQuery("sellStatus", houseViewSearchDTO.getSellStatus()));
3.范围查询
//大于开始价格
queryBuilder.must(QueryBuilders.rangeQuery("houseTotalPrice").gte(
DECIMAL_GAP_APPLY.apply(new BigDecimal(houseViewSearchDTO.getStartPrice())).longValue()));
//小于结束价格
queryBuilder.must(QueryBuilders.rangeQuery("houseTotalPrice").lte(
DECIMAL_GAP_APPLY.apply(new BigDecimal(houseViewSearchDTO.getEndPrice())).longValue()));
4.must和mustNot组合使用
//A数组存在
BoolQueryBuilder bindOrganizationNoBoolQuery = QueryBuilders.boolQuery(); bindOrganizationNoBoolQuery.should(QueryBuilders.termsQuery("bindOrganizationNoList", houseViewSearchDTO.getOrganizationNoList()));
//B数组不存在
BoolQueryBuilder noBindOrganizationNoListBoolQuery = QueryBuilders.boolQuery(); noBindOrganizationNoListBoolQuery.must(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("noBindOrganizationNoList", houseViewSearchDTO.getOrganizationNoList())));
bindOrganizationNoBoolQuery.should(noBindOrganizationNoListBoolQuery);
queryBuilder.must(bindOrganizationNoBoolQuery);
5.对某个字段排序
BoolQueryBuilder boolQueryBuilder = mallHouseQueryAction.searchSourceBuild(houseViewSearchDTO);
SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource();
searchSourceBuilder.query(boolQueryBuilder).sort(houseViewSearchDTO.getOrderFlag(), SortOrder.ASC);
6.分页查询
searchSourceBuilder.from((houseViewSearchDTO.getPageNo() - 1) * houseViewSearchDTO.getPageSize());
searchSourceBuilder.size(houseViewSearchDTO.getPageSize());
7.索引创建
@Autowired
private RestHighLevelClient esClient;
// 创建索引
CreateIndexRequest request = new CreateIndexRequest("v1");
CreateIndexResponse createIndexResponse =null;
try {
createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.info("失败");
}
// 响应状态
boolean acknowledged = createIndexResponse.isAcknowledged();
8.数据删除
BulkRequest bulkRequest = new BulkRequest();
DeleteRequest deleteRequest =
newDeleteRequest(businessConfig.getItem().getRealHouseEsIndex());
deleteRequest.type(businessConfig.getItem().getHouseEsType());
deleteRequest.id(id.toString());
bulkRequest.add(deleteRequest);
esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
9.数据提交
BulkRequest bulkRequest = new BulkRequest();
IndexRequest indexRequest = new IndexRequest(businessConfig.getItem().getRealHouseEsIndex());
indexRequest.type(businessConfig.getItem().getHouseEsType());
indexRequest.id(houseInfoESEntity.getId().toString());
indexRequest.source(JSONUtil.fromObjToJson(houseInfoESEntity), XContentType.JSON);
bulkRequest.add(indexRequest);
esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
10.数据查询
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(businessConfig.getItem().getRealHouseEsIndex());
/*
为稳定相关度分数排序逻辑,详见https://www.elastic.co/guide/en/elasticsearch/reference/6.8/consistent-scoring.html
*/
searchRequest.types(businessConfig.getItem().getHouseEsType());
searchRequest.preference("zcmall");
searchRequest.source(sourceBuilder);
log.debug("sourceSearch, index: {}, type: {}, source: {}", businessConfig.getItem().getRealSkuEsIndex(), businessConfig.getItem().getSkuEsType(),
sourceBuilder);
return esClient.search(searchRequest, RequestOptions.DEFAULT);
11.接入ES
/**
* es bean
* Luoxiao
*/
@Configuration
public class DalConfig {
@Value("${}")
private String esHost;
@Value("${}")
private int esRestPort;
@Value("${}")
private String esSecurityUser;
private static final int SOCKET_TIMEOUT = 60 * 1000;
/**
* 创建es rest client 实例
*
* @return es rest client
*/
@Bean
public RestHighLevelClient restHighLevelClient() {
RestClientBuilder clientBuilder = RestClient
.builder(Arrays.stream(esHost.split(","))
.map(s -> new HttpHost(s, esRestPort))
.toArray(HttpHost[]::new));
if (StringUtils.hasText(esSecurityUser)) {
String[] userNameAndPassword = esSecurityUser.split(":");
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userNameAndPassword[0], userNameAndPassword[1]));
clientBuilder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
}
clientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setSocketTimeout(SOCKET_TIMEOUT);
}
});
return new RestHighLevelClient(clientBuilder);
}
}