2012-05-31 38 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?偏好=我的寻呼键,以确保用于每个页面的一致碎片请求