主要包含了如下幾個api
match類型查詢,會把查詢條件進行分詞,而後再查詢,詞條之間是or關係,按照相關性得分排序。app
GET /lind/_search { "query": { "match":{ "name": "hello world" } } }
改爲and,而且的關係elasticsearch
GET /lind/_search { "query":{ "match":{ "title":{ "query":"中國生活", "operator":"and" } } } }
minimum_should_match參數:match支持使用minimum_should_match 最小匹配參數,一般設置爲一個百分數.
用戶給定的條件分詞後,有3個詞,可是其中的2個是在描述他想要搜索的內容,那咱們使用minimum_should_match就是最好的選擇!post
GET /lind/_search { "query":{ "match":{ "title":{ "query":"中國人", "minimum_should_match":"75%" } } } }
muti_match和match同樣,可是不一樣的是它能夠同時在多個字段中檢索ui
GET /lind/_search { "query":{ "multi_match":{ "query":"國產", "fields":["title","name"] } }
它被用做精確查詢,好比數字,時間,布爾,和字段屬性爲keyword類型的關鍵字,後面講的聚合也只支持精確字段,而分詞字段text是不被支持
的。code
GET /lind/_search { "query": { "term": { "sex": { "value": "中國" } } } }
聚合操做,咱們能夠對數據進行分組的求和,求數,最大值,最小值,或者其它的自定義的統計功能,es對聚合有着不錯的支持,須要注意的是,在對某字段進行聚合以後,須要開啓這個字段的fielddata我,或者會出現以下錯誤:對象
Fielddata is disabled on text fields by default.
經過postman等工做像es api發送請求,能夠將字段的這個特性打開.blog
PUT /esdto/esdto/_mapping { "properties": { "sex": { "type": "text", "fielddata": true } } }
使用ElasticsearchTemplate對sex字段進行聚合排序
// 建立一個查詢條件對象 BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); // 拼接查詢條件 queryBuilder.should(QueryBuilders.termQuery("creator", "1")); // 建立聚合查詢條件 TermsAggregationBuilder agg = AggregationBuilders.terms("sex").field("sex.keyword");//keyword表示不使用分詞進行聚合 // 建立查詢對象 SearchQuery build = new NativeSearchQueryBuilder() .withQuery(queryBuilder) //添加查詢條件 .addAggregation(agg) // 添加聚合條件 .withPageable(PageRequest.of(0, 10)) //符合查詢條件的文檔分頁(不是聚合的分頁) .build(); // 執行查詢 AggregatedPage<TestEsDto> testEntities = elasticsearchTemplate.queryForPage(build, TestEsDto.class); // 取出聚合結果 Aggregations entitiesAggregations = testEntities.getAggregations(); Terms terms = (Terms) entitiesAggregations.asMap().get("sex"); // 遍歷取出聚合字段列的值,與對應的數量 for (Terms.Bucket bucket : terms.getBuckets()) { String keyAsString = bucket.getKeyAsString(); // 聚合字段列的值 long docCount = bucket.getDocCount();// 聚合字段對應的數量 log.info("keyAsString={},value={}", keyAsString, docCount); }