2012-05-31 16 views
7

Ich benutze elasticsearch mit pyes. Ich erhalte Dubletten in meiner letzten Ergebnisseite. Hier ist meine Frage:ElasticSearch doppelte Ergebnisse mit Paging

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

In dieser Abfrage, ich habe

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

und auch für diese Abfrage der TOTAL_COUNT von Objekten zurückgegeben werden, sind 24. Mit einem „von“ bei 15 und einem TOTAL_COUNT von 24 Ich möchte hier 9 Ergebnisse erhalten. Aber stattdessen, weil ich "size" auf 15 setze, erhalte ich 15 Ergebniseinträge. Da es nur 9 eindeutige Ergebnisse gibt, werden 6 Dokumente doppelt angezeigt. Irgendeine Idee, wie man das macht, gibt mir 9 Ergebnisse statt 15 mit Duplikaten?

Danke für Ihre Hilfe!

+0

Sie könnten search_type = scannen und mit der Rolle versuchen wollen api. –

+0

Welche Version von ES verwenden Sie? Es wurde ein Fehler in 0.90 behoben. Sie sagen "total_count", aber das existiert nicht. Schaust du dir die Anzahl der Facetten oder die Gesamtzahl der Treffer an? dh mehr Info erforderlich – DrTech

+0

Siehe https://github.com/elasticsearch/elasticsearch/issues/3078 für den Fehler – DrTech

Antwort

7

Wenn Sie die Daten auf mehrere Shards haben, kann es mehrmals zurückkehren, ich weiß nicht warum. Entschuldigung, das ist nicht sehr spezifisch, weil ich nicht weiß, warum es passiert.

Versuchen Sie eine Präferenz mit: http://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-preference.html

Wir bevorzugen Zeichenkette verwenden und es behoben unsere doppelte Daten Problem.

Was ist Ihre Replikationseinstellung? Ist es möglich, dass die Daten mehrere Shards enthalten? Welche Version verwendest du?

Leider können Sie mit pyes keine Präferenz für den Multi-Suchanruf angeben. Versuchen Sie, eine Präferenz als Suchparameter im Suchaufruf anzugeben.

Suche (Index = ..., ....., bevorzugt =)

3

Das Problem ist, dass Sie von einem Feld zu sortier (oder standardmäßig durch die _score), die sich über docs doppelte Werte hat . Nach meinem Verständnis können verschiedene Shards doppelte Feldwerte in verschiedenen Ordnungen sortieren.

Wenn Sie also für jede Anfrage einen anderen Shard erhalten, erhalten Sie möglicherweise unterschiedliche Sortierreihenfolgen, und daher erhalten Sie möglicherweise das gleiche Dokument auf zwei verschiedenen Seiten (je nachdem, welchen Shard Sie angefordert haben).

Wie TheJeff oben erwähnt, ist das Update _search? Präferenz = my-Paging-Taste, um eine konsistente Scherbe für jeden der Seite angeben, fordert verwendet, um sicherzustellen

Verwandte Themen