public static void main(String[] args) throws IOException {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));
// insertRandom(client);
esSearch(client);
}
private static void esSearch(RestHighLevelClient client) throws IOException {
String keyword = "衣";
String minPrice = "1";
String maxPrice = "10000";
String category = "clothing";
String sortStr = "price";
String index = "0";
esSearchResult(keyword, minPrice, maxPrice, category, sortStr, client, index);
}
private static void esSearchResult(String keyword, String minPrice, String maxPrice, String category, String sortStr, RestHighLevelClient client, String index) throws IOException {
SearchRequest searchRequest = new SearchRequest("product");
searchRequest.types("_doc");
SearchSourceBuilder searchBuilder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
if (StringUtils.isNotBlank(keyword)) {
MultiMatchQueryBuilder multiQuery = new MultiMatchQueryBuilder(keyword, "title", "description");
bool.must(multiQuery);
}
if (StringUtils.isNotBlank(category)) {
TermQueryBuilder termQueryBuilder = new TermQueryBuilder("category.keyword",category);//由于是字符串,必须keyword
bool.must(termQueryBuilder);
}
if (StringUtils.isNotBlank(minPrice) || StringUtils.isNotBlank(maxPrice)) {
RangeQueryBuilder priceBuild = new RangeQueryBuilder("price");
if (StringUtils.isNotBlank(minPrice)) priceBuild.gte(Integer.parseInt(minPrice));
if (StringUtils.isNotBlank(maxPrice)) priceBuild.lte(Integer.parseInt(maxPrice));
}
searchBuilder.query(bool);
if (StringUtils.isNotBlank(sortStr)) {
searchBuilder.sort(sortStr, SortOrder.DESC);
}
if (StringUtils.isNotBlank(index)) {
searchBuilder.from(Integer.parseInt(index)).size(5);
}
searchRequest.source(searchBuilder);
System.out.println(searchRequest.toString());
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
TotalHits totalHits = hits.getTotalHits();
System.out.println("总数量 " + totalHits.value);
SearchHit[] h = hits.getHits();
System.out.println(" ID \t\t code \t\t price \t\t description \t\t\t\t category ");
for (SearchHit d : h) {
Map<String, Object> itemMap = d.getSourceAsMap();
System.out.println(String.format(" %s \t\t %s \t\t %s \t\t %s \t\t %s \t\t\t\t %s ",
d.getId(),itemMap.get("title"),itemMap.get("code"),itemMap.get("price"),itemMap.get("description"),itemMap.get("category")));
}
}
依赖
<!-- low-level client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>8.2.2</version>
</dependency>
数据