ElasticSearch通过分页复制结果

Cla*_*ell 8 elasticsearch

我正在使用带有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"
    ]
},
Run Code Online (Sandbox Code Playgroud)

在这个查询中,我有

    "size": 15,
    "from": 15,
Run Code Online (Sandbox Code Playgroud)

并且对于这个特定的查询,返回的对象的total_count是24.当15处的"from"和24的total_count时,我想在这里获得9个结果.但相反,因为我将"size"设置为15,我得到15个结果条目.由于仅剩下9个唯一结果,因此将显示6个文档两次.关于如何制作这个的任何想法给我9个结果而不是15个重复?

谢谢你的帮助!

The*_*eff 8

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

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

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

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

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

搜索(index = ...,.....,preference =)


小智 6

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

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

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