2012-05-31 16 views
7

私は弓でelasticsearchを使用しています。最後の結果ページに重複があります。私はElasticSearchページングを使用した重複結果

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

も、この特定のクエリに対して返されるオブジェクトのTOTAL_COUNTは15で、「から」と24のTOTAL_COUNTで24あるを持って、このクエリでは

"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" 
    ] 
}, 

:ここに私のクエリです私はここで9つの結果を得たいと思っています。しかし、代わりに、私は "サイズ"を15に設定するので、私は15の結果エントリを取得します。ユニークな結果が9件しか残っていないため、6件のドキュメントが2回表示されています。これをどうやって作るかについてのアイデアは、重複して15個ではなく9個の結果を出すのですか?

ありがとうございました!

+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して、デフォルトでは)ドキュメント間で重複した値を持っています。私の理解は、異なる破片が重複したフィールド値を異なる順序で並べ替えるかもしれないということです。

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

TheJeffは、前述したように、修正は_search?好み=ページごとに使用する一貫性のシャードを確保するために、私のページングの鍵は

関連する問題