2012-05-31 3 views
7

Sto usando elasticsearch con pyes. Sto ottenendo duplicati nella mia ultima pagina di risultati. Ecco la mia domanda:ElasticSearch risultati duplicati con cercapersone

"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 questa query, ho

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

e anche per questo particolare query TOTAL_COUNT di oggetti restituito è 24. Con un "da" a 15 e un TOTAL_COUNT di 24 , Mi piacerebbe avere 9 risultati qui. Ma invece, perché ho impostato "dimensione" a 15, ottengo 15 voci di risultati. Poiché sono rimasti solo 9 risultati unici, 6 documenti vengono visualizzati due volte. Qualche idea su come fare questo mi dà 9 risultati anziché 15 con duplicati?

Grazie per il vostro aiuto!

+0

si potrebbe desiderare di provare SEARCH_TYPE = eseguire la scansione e l'utilizzo del rotolo api. –

+0

Quale versione di ES stai usando? C'era un bug in 0.90 che è stato corretto. Dici "total_count" ma questo non esiste. Stai guardando il numero di faccette o il numero totale di colpi? cioè maggiori informazioni richieste – DrTech

+0

Vedere https://github.com/elasticsearch/elasticsearch/issues/3078 per l'errore – DrTech

risposta

7

Se si dispone dei dati su più frammenti, è possibile che vengano restituiti più volte, non so perché. Scusa, non è molto specifico perché non so perché succede.

provare a utilizzare un preferenza: http://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-preference.html

Usiamo una stringa preferenza personalizzato, ed è fissata il nostro problema di dati duplicati.

Qual è l'impostazione della replica? È possibile che i dati siano su più frammenti? Che versione stai usando?

Sfortunatamente con i pyes, non è possibile specificare una preferenza per la chiamata di ricerca multipla. Prova a specificare una preferenza come parametro di query nella chiamata di ricerca.

ricerca (index = ..., ....., preferenza =)

3

Il problema è che si sta ordinamento per un campo (o di default dal _score), che ha valori duplicati in tutta docs . La mia comprensione è che i diversi frammenti possono ordinare valori di campi duplicati in ordini diversi.

Pertanto, quando si ottiene un frammento diverso per ciascuna richiesta, è possibile ottenere diversi ordinamenti e, pertanto, è possibile ordinare lo stesso documento su due pagine diverse (a seconda del frammento richiesto).

Come TheJeff accennato in precedenza, la correzione è specificare _search? Preferenza = my-paging-chiave per assicurare un frammento coerente utilizzata per ciascuna della pagina richiede