我在完全理解我試圖用java API(v1.7.1)構建的elasticsearch查詢的行爲時遇到了一些麻煩。以下是最初的SearchRequestBuilder
;Elasticsearch java API查詢行爲奇怪
SearchRequestBuilder builder = client.prepareSearch("my_index")
.setTypes("my_document_type")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
我有一兩個和title
場content
索引文檔的集合。當我嘗試匹配title
字段中的短語時,
builder.setQuery(QueryBuilders.matchPhraseQuery("title", keyword));
然後,當然,
SearchResponse response = builder.execute().actionGet();
此查詢的行爲作品完全一樣我希望 - 我的搜索返回基於關閉的title
字段的內容高度相關的結果 - 到目前爲止好。
但是,當我嘗試向構建器添加另一個查詢時;
builder.setQuery(QueryBuilders.matchQuery("content", keyword));
我原來非常相關的結果(基於標題內容)現在不太可以理解。例如,一個搜索短語(關鍵字)「這是一個測試」將返回那個短語單詞逐個存在的地方(在標題中) - 就像我說的那樣,完美。然而,現在增加第二個查詢使得那些以前相關的文檔完全從結果中刪除 - 無處可查。即使相同的文本與以前相同的字段匹配。顯然,我做錯了什麼,我只是不明白什麼 - 或者如何實現預期的行爲,即匹配關鍵字title
和content
並返回相關結果,這意味着如果在title
I中存在非常接近的短語匹配預計會看到這些文件得分更高。我也嘗試過增強效果,
builder.setQuery(QueryBuilders.matchPhraseQuery("title", keyword).boost(5.0f));
builder.setQuery(QueryBuilders.matchQuery("content", keyword));
任何援助將不勝感激。