2012-05-31 22 views
7

Estoy usando elasticsearch con pyes. Obtengo duplicados en mi última página de resultados. Aquí está mi consulta:ElasticSearch resultados duplicados con paginación

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

En esta consulta, tengo

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

y también para esta consulta en particular la TOTAL_COUNT de objetos devueltos es 24. Con un "de" en 15 y un TOTAL_COUNT de 24 , Me gustaría obtener 9 resultados aquí. Pero, en cambio, como configuro "tamaño" a 15, obtengo 15 entradas de resultados. Como solo quedan 9 resultados únicos, se muestran 6 documentos dos veces. ¿Alguna idea sobre cómo hacer esto me da 9 resultados en lugar de 15 con duplicados?

Gracias por su ayuda!

+0

Es posible que desee probar search_type = escanear y usar el rollo Api. –

+0

¿Qué versión de ES estás usando? Hubo un error en 0.90 que se ha corregido. Usted dice "total_count", pero eso no existe. ¿Estás mirando el conteo de facetas o el total de visitas? es decir, se requiere más información – DrTech

+0

Ver https://github.com/elasticsearch/elasticsearch/issues/3078 para el error – DrTech

Respuesta

7

Si tiene los datos en varios fragmentos, puede volver varias veces, no sé por qué. Lo siento, eso no es muy específico porque no sé por qué sucede.

Trate de usar una preferencia: http://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-preference.html

se utiliza una cadena personalizada preferencia, y se fija nuestra edición de datos duplicados.

¿Cuál es su configuración de replicación? ¿Es posible que los datos estén en fragmentos múltiples? Qué versión estás usando?

Desafortunadamente con pyes, no puede especificar una preferencia en la llamada de búsqueda múltiple. Intente especificar una preferencia como un parámetro de consulta en la búsqueda.

de búsqueda (índice = ..., ....., preferencia =)

3

La cuestión es que se toque lavar por un campo (o en su defecto por el _SCORE) que tiene valores duplicados a través de documentos . Tengo entendido que diferentes fragmentos pueden ordenar los valores de campo duplicados en diferentes órdenes.

Por lo tanto, cuando obtiene un fragmento diferente para cada solicitud, puede obtener diferentes órdenes de clasificación y, por lo tanto, puede obtener el mismo documento ordenado en dos páginas diferentes (dependiendo del fragmento que haya solicitado).

Como TheJeff se mencionó anteriormente, la solución es especificar _search? Preferencia = mi-paginación-clave para garantizar un fragmento consistente utilizado para cada una de las solicitudes de páginas

Cuestiones relacionadas