【问题标题】:ElasticSearch duplicate results with paging带有分页的 ElasticSearch 重复结果
【发布时间】:2012-06-05 20:38:52
【问题描述】:

我正在使用带有 pyes 的 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,

对于这个特定的查询,返回的对象的总计数是 24。“从”为 15,总计数为 24,我想在这里得到 9 个结果。但相反,因为我将“大小”设置为 15,所以我得到 15 个结果条目。由于只剩下 9 个唯一结果,因此将显示 6 个文档两次。关于如何使这给我 9 个结果而不是 15 个重复的任何想法?

感谢您的帮助!

【问题讨论】:

  • 您可能想尝试 search_type=scan 并使用滚动 API。
  • 你用的是什么版本的ES? 0.90 中存在一个已修复的错误。你说“total_count”,但那不存在。您是在查看构面计数还是点击总数?即需要更多信息

标签: elasticsearch


【解决方案1】:

如果你有多个分片上的数据,它可能会返回多次,我不知道为什么。抱歉,这不是很具体,因为我不知道为什么会这样。

尝试使用首选项:http://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-preference.html

我们使用首选项自定义字符串,它修复了我们的重复数据问题。

您的复制设置是什么?数据是否可能在多个分片上?你用的是什么版本?

不幸的是,使用 pyes,您无法在多搜索调用中指定首选项。尝试在搜索调用中将首选项指定为查询参数。

搜索(索引=...,.....,偏好=)

【讨论】:

    【解决方案2】:

    问题是您正在按跨文档具有重复值的字段(或默认情况下按 _score)进行排序。我的理解是,不同的分片可能以不同的顺序对重复的字段值进行排序。

    因此,当您为每个请求获得不同的分片时,您可能会获得不同的排序顺序,因此,您可能会将相同的文档排序到两个不同的页面上(取决于您询问的分片)。

    正如上面提到的 TheJeff,解决方法是指定 _search?preference=my-paging-key 以确保每个页面请求使用一致的分片

    【讨论】:

      【解决方案3】:

      只是想在这里分享与此相关的经验,由于多个分片,我在搜索查询中使用 from/size 分页参数时也在不同页面中获得重复结果。

      我尝试了这里记录的关于 preferences in ElasticSearch 的一些事情,并且在主分片上执行查询已经为我解决了这个问题。

      “偏好”:“_primary_first”

      如果你使用的是python库,可以考虑这个参考:

      https://elasticsearch-py.readthedocs.io/en/master/api.html#elasticsearch.Elasticsearch.search

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 2015-05-10
        相关资源
        最近更新 更多