10

私は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,

また、この特定のクエリでは、返されるオブジェクトの total_count は 24 です。「from」が 15 で、total_count が 24 の場合、ここで 9 つの結果を取得したいと思います。しかし、代わりに、「サイズ」を 15 に設定したため、15 の結果エントリが得られます。一意の結果が 9 つしか残っていないため、6 つのドキュメントが 2 回表示されています。これを作成する方法についてのアイデアは、重複のある 15 ではなく 9 つの結果をもたらしますか?

ご協力いただきありがとうございます!

4

3 に答える 3

9

複数のシャードにデータがある場合、複数回返される可能性があります。理由はわかりません。申し訳ありませんが、なぜそれが起こるのか分からないので、それはあまり具体的ではありません.

設定を使用してみてください: http://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-preference.html

設定カスタム文字列を使用し、重複データの問題を修正しました。

レプリケーション設定は何ですか? データが複数のシャードにある可能性はありますか? どのバージョンを使用していますか?

残念ながら pyes では、マルチ検索呼び出しで設定を指定することはできません。検索呼び出しで設定をクエリ パラメータとして指定してみてください。

search(index=..., ....., プリファレンス=)

于 2015-05-14T15:48:44.290 に答える
6

問題は、ドキュメント間で値が重複しているフィールド (またはデフォルトでは _score) で並べ替えていることです。私の理解では、異なるシャードは重複するフィールド値を異なる順序でソートする可能性があります。

したがって、リクエストごとに異なるシャードを取得すると、異なるソート順を取得する可能性があり、したがって、同じドキュメントが 2 つの diff't ページにソートされる可能性があります (どのシャードを要求したかによって異なります)。

TheJeff が上で述べたように、修正は _search?preference=my-paging-key を指定して、各ページ要求に使用される一貫性のあるシャードを確保することです

于 2015-10-05T14:36:43.907 に答える