2017-03-01 125 views
0

我想在彈性搜索數據庫中插入6條記錄後進行彈性搜索。彈性搜索匹配查詢返回不正確的結果和得分

插入的記錄是簡單的JSON具有兩個屬性標識和文字

"OCC-001","Car Damaged During Loading" 
"OCC-002","Car jango jango jango Damaged Loading" 
"OCC-003","hjjkhjkasd hjkhjklhas d Cars asdasd jango asdsas jango jango Damaged asdsad asdasdasd Loading" 
"OCC-004","This should not come at all " 
"OCC-005","This may come Car" 
"OCC-006","Will this come Cars" 

我在做類似下面

SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(
       matchQuery("title","Car Damaged")) 
       .build(); 

     FacetedPage<Occurrence> occurrences = myElasticSearchRepository.search(searchQuery); 
     return occurrences; 

我得到不正確的結果,並在錯誤的順序

搜索
"OCC-005","This may come Car" 
"OCC-001","Car Damaged During Loading" 
"OCC-002","Car jango jango jango Damaged Loading" 

當我使用下面的查詢做同樣的搜索時,我得到了正確的結果,但是在不同的順序

http://localhost:9200/myIndex/cars/_search?q=Car%20Damaged

"OCC-001","Car Damaged During Loading" 
"OCC-002","Car jango jango jango Damaged Loading" 
"OCC-005","This may come Car" 
"OCC-003","hjjkhjkasd hjkhjklhas d Cars asdasd jango asdsas jango jango Damaged asdsad asdasdasd Loading" 

貌似我是洞的東西根本不正確。

請注意。

回答

0

我對這個例子使用了嵌入式彈性搜索。 經過一段時間的調試後,我試圖刪除並重新創建索引。

您可以使用http://localhost:9200/_cat/indices?v來監控指數。 有一個彈性搜索所有主要功能 - 清除緩存,刷新索引等作弊表

可能我的索引已損壞。我放棄了舊的索引並以不同的名稱重新創建索引,並且按預期工作。

搜索結果是相關的,分數與預期結果相匹配。

1

如果您是Elasticsearch的新手,我建議您嘗試使用請求身體搜索而不是URI搜索。你可以找到它here。如果你需要查詢工具,你可以嘗試Sense。

對於Java客戶端庫與Elasticsearch進行交互here,因爲我在1年前面臨一個問題,因爲Spring數據彈性搜索在更新版本中與Elasticsearch版本匹配較慢。

0

如果您有多個分片和少量數據,那麼當您使用默認搜索類型query_then_fetch時,您可能會得到錯誤分數,因爲當少量數據分散在多個分片中時,IDF算法開始給出不好的結果。 在這種情況下,您正在尋找另一種搜索類型,即dfs_query_then_fetch。 這將是這樣的

SearchQuery searchQuery = new NativeSearchQueryBuilder() 
            .withQuery(matchQuery("title","Car Damaged"))          
            .withSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
            .build(); 

有關搜索型附加信息以及爲什麼它是重要的可以在這裏找到https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-type.html#search-request-search-type

相關問題