2012-05-31 39 views
7

我對pyes使用elasticsearch。我在最後一頁結果中看到重複內容。這裏是我的查詢:ElasticSearch與分頁重複結果

"query": { 
    "query": { 
     "filtered": { 
      "filter": { 
       "and": [ 
        { 
         "match_all": { 

         } 
        } 
       ] 
      }, 
      "query": { 
       "bool": { 
        "minimum_number_should_match": 1, 
        "should": [ 
         { 
          "text": { 
           "name.keyword_name": { 
            "operator": "and", 
            "query": "kentucky", 
            "type": "boolean", 
            "fuzziness": 0.8 
           } 
          } 
         }, 
         { 
          "text": { 
           "address": { 
            "operator": "and", 
            "query": "kentucky", 
            "type": "boolean" 
           } 
          } 
         }, 
         { 
          "text": { 
           "neighborhoods.name": { 
            "operator": "and", 
            "query": "kentucky", 
            "type": "boolean", 
            "fuzziness": 0.8 
           } 
          } 
         }, 
         { 
          "text": { 
           "categories.name": { 
            "operator": "and", 
            "query": "kentucky", 
            "type": "boolean", 
            "fuzziness": 0.8 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    }, 
    "facets": { 
     "neighborhoods.id": { 
      "terms": { 
       "field": "neighborhoods.id", 
       "size": 10 
      } 
     }, 
     "categories.id": { 
      "terms": { 
       "field": "categories.id", 
       "size": 10 
      } 
     } 
    }, 
    "size": 15, 
    "from": 15, 
    "fields": [ 
     "id", 
     "categories.id", 
     "name", 
     "address", 
     "city", 
     "state", 
     "zipcode", 
     "location", 
     "_id", 
     "pos_review_count", 
     "neg_review_count", 
     "wishlist_count", 
     "recommender_count", 
     "checkin_count" 
    ] 
}, 

在此查詢,我有

"size": 15, 
    "from": 15, 

,也爲這個特殊的查詢對象返回的TOTAL_COUNT是24.一個「從」在15和24 TOTAL_COUNT ,我想在這裏得到9個結果。但是相反,因爲我將「大小」設置爲15,我得到了15個結果條目。由於剩下的結果只有9個,所以有6個文件顯示兩次。任何想法如何使這給我9結果而不是15與重複?

感謝您的幫助!

+0

你可能想嘗試SEARCH_TYPE =掃描和使用滾動API。 –

+0

您使用的是哪個版本的ES? 0.90中存在一個已修復的錯誤。你說「total_count」,但不存在。你在觀看方面數還是總點數?即需要更多的信息 – DrTech

+0

查看https://github.com/elasticsearch/elasticsearch/issues/3078的錯誤 – DrTech

回答

7

如果你有多個分片的數據,它可能會返回多次,我不知道爲什麼。對不起,這不是很具體,因爲我不知道它爲什麼會發生。

嘗試使用偏好:http://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-preference.html

我們使用偏好自定義字符串,並將其固定我們的重複數據的問題。

什麼是您的複製設置?數據是否可能在多個碎片上?你使用什麼版本?

對於pyes,不幸的是,您無法在多重搜索調用中指定首選項。嘗試在搜索調用中指定首選項作爲查詢參數。

搜索(指數= ......,......,偏好=)

3

的問題是,你被一個字段排序(或由_score默認),其中有跨文檔重複值。我的理解是,不同的分片可能按照不同的順序排列重複的字段值。

因此,當您爲每個請求獲得不同的分片時,您可能會得到不同的排序順序,因此,您可能會將相同的文檔分類到兩個不同的頁面(取決於您要求的分片)。

正如TheJeff上面提到的,解決方法是指定_search?偏好=我的尋呼鍵,以確保用於每個頁面的一致碎片請求