Elasticsearch search使用幾點總結

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

一、使用match進行匹配的時候:

1.匹配的時候,如果想儘可能的多檢索結果,考慮使用match;
2.如果想儘可能精確的匹配分詞結果,考慮使用match_phrase;
3.如果短語匹配的時候,怕遺漏,考慮使用match_phrase_prefix。

二、使用term匹配的時候,主要是確定詞匹配 keyword或者 integer型別,可以是陣列

三、使用must和should結合的時候,層級關係不同導致的結果不同,AND 結合 OR形式應該如這種**

    private static void addKeywordSearchQuery(String keyWordStr,BoolQueryBuilder boolQueryBuilder){
        String[] keywords = keyWordStr.split("\\|");
        //這裡注意must必須為平級,否則會合並
        BoolQueryBuilder shouldBool = QueryBuilders.boolQuery();
        for (int i = 0; i < keywords.length; i  ) {
            if (StringUtils.isNotEmpty(keywords[i])) {
                String[] split = keywords[i].split("\\ | ");
                if (split.length>1){
                    BoolQueryBuilder contetnQuery = QueryBuilders.boolQuery();
                    BoolQueryBuilder titleQuery = QueryBuilders.boolQuery();
                    for (int j = 0; j < split.length; j  ) {
                        if (!StringUtils.isEmpty(split[j])){
                            contetnQuery.must(QueryBuilders.matchPhrasePrefixQuery("content",split[j]));
                            titleQuery.must(QueryBuilders.matchPhrasePrefixQuery("title",split[j]));
                        }
                    }
                    shouldBool.should(QueryBuilders.boolQuery().should(contetnQuery).should(titleQuery));

                }else {
                    BoolQueryBuilder contentShould = QueryBuilders.boolQuery();
                    contentShould.should(QueryBuilders.matchPhrasePrefixQuery("content", keywords[i]));
                    contentShould.should(QueryBuilders.matchPhrasePrefixQuery("title", keywords[i]));
                    shouldBool.should(contentShould);
                }

            }
        }
        boolQueryBuilder.must( QueryBuilders.boolQuery().must(shouldBool));

    }

四、可以使用range來確定範圍,時間上比較常用:**

      boolQueryBuilder.must(QueryBuilders.rangeQuery("infotime").gte(opinionSearchBean.getStartTime().getTime())
                    .lte(opinionSearchBean.getEndTime().getTime()));

五、對id進行過濾**

            boolQueryBuilder.filter(QueryBuilders.idsQuery().types("opiniondata")
                    .addIds(opinionids.toArray(new String[opinionids.size()])));

六、對某個值進行排序的時候,如果沒有設定預設值,則這個值初始化是null,這時候排序則部分生效,如果需要對某個值進行排序的時候,需要進行初始值設定即可。

相關文章

開發語言 最新文章