2011-12-27 13 views
6

estoy trabajando fuera del ejemplo de uso pYES hereElasticSearch paginación a través de pyes. Offset ignorado

estoy indexación prueba de índice de con cuatro documentos y consultar posteriormente utilizando distintos desplazamientos. El start parámetro no cambia el desplazamiento para mí, sigo obteniendo los mismos resultados independientemente de su valor. ¿Por qué está pasando esto?

from pyes import * 
conn = ES(["localhost:9200"]) 
try: 
    conn.delete_index('test-index') 
except: 
    pass 

conn.create_index('test-index') 

mapping = {u'name': {'boost': 1.0, 
       'index': 'analyzed', 
       'store': 'yes', 
       'type': u'string', 
       "term_vector" : "with_positions_offsets"}, 
     u'title': {'boost': 1.0, 
       'index': 'analyzed', 
       'store': 'yes', 
       'type': u'string', 
       "term_vector" : "with_positions_offsets"}, 
     u'pos': {'store': 'yes', 
       'type': u'integer'}, 
     u'uuid': {'boost': 1.0, 
       'index': 'not_analyzed', 
       'store': 'yes', 
       'type': u'string'}} 

conn.put_mapping("test-type", {'properties':mapping}, ["test-index"]) 

conn.index({"name":"Joe Tester", "uuid":"11111", "position":1}, "test-index", "test-type", 1) 
conn.index({"name":"Bill Baloney", "uuid":"22222", "position":2}, "test-index", "test-type", 2) 
conn.index({"name":"Joe Joseph", "uuid":"33333", "position":3}, "test-index", "test-type", 3) 
conn.index({"name":"Last Joe", "uuid":"44444", "position":4}, "test-index", "test-type", 4) 

conn.refresh(["test-index"]) 

q = TermQuery("name", "joe") 
r0 = conn.search(q, indices = ["test-index"], start=0, size=1) 
r1 = conn.search(q, indices = ["test-index"], start=1, size=1) 
r2 = conn.search(q, indices = ["test-index"], start=2, size=1) 

print('0: {0}'.format(r0['hits']['hits'])) 
print('1: {0}'.format(r1['hits']['hits'])) 
print('2: {0}'.format(r2['hits']['hits'])) 

de salida:

$ python pagination.py 
0: [{u'_score': 0.19178301, u'_type': u'test-type', u'_id': u'4', u'_source': {u'position': 4, u'name': u'Last Joe', u'uuid': u'44444'}, u'_index': u'test-index'}] 
1: [{u'_score': 0.19178301, u'_type': u'test-type', u'_id': u'4', u'_source': {u'position': 4, u'name': u'Last Joe', u'uuid': u'44444'}, u'_index': u'test-index'}] 
2: [{u'_score': 0.19178301, u'_type': u'test-type', u'_id': u'4', u'_source': {u'position': 4, u'name': u'Last Joe', u'uuid': u'44444'}, u'_index': u'test-index'}] 

Mi versión es pYES 0.16.0

Respuesta

4

El problema estaba en cómo se envió la solicitud a ES, aunque aún no tengo claro por qué falló.

En lugar de enviar las consultas directamente a ES como lo hice originalmente:

r0 = conn.search(q, indexes = ["test-index"], start=0, size=1) 
r1 = conn.search(q, indexes = ["test-index"], start=1, size=1) 
r2 = conn.search(q, indexes = ["test-index"], start=2, size=1) 

envolví mis consultas en un objeto pyes.query.Search:

r0 = conn.search(Search(q, start=0, size=1), indexes = ["test-index"]) 
r1 = conn.search(Search(q, start=1, size=1), indexes = ["test-index"]) 
r2 = conn.search(Search(q, start=2, size=1), indexes = ["test-index"]) 

Eso funcionó, ver la salida a continuación:

0s: [{u'_score': 0.19178301, u'_type': u'test-type', u'_id': u'4', u'_source': {u'position': 4, u'name': u'Last Joe', u'uuid': u'44444'}, u'_index': u'test-index'}] 
1s: [{u'_score': 0.19178301, u'_type': u'test-type', u'_id': u'1', u'_source': {u'position': 1, u'name': u'Joe Tester', u'uuid': u'11111'}, u'_index': u'test-index'}] 
2s: [{u'_score': 0.19178301, u'_type': u'test-type', u'_id': u'3', u'_source': {u'position': 3, u'name': u'Joe Joseph', u'uuid': u'33333'}, u'_index': u'test-index'}] 
+0

Tengo problemas con esto y obtengo la excepción registrada sin consulta cuando la búsqueda elástica analiza la búsqueda. ¿Qué versión de pyes usabas? –

+0

@Matt pyes versión 0.16.0 –

+0

El parámetro 'índices' es confuso, ya que 'índices' se usa en los casos de prueba de pyes. Se ignoran los "índices" y se buscan todos los índices. Si tienen el mismo mapeo o solo tiene un índice que está bien, de lo contrario, verá un error. –

2

asegurar que su uso de un tipo de búsqueda de Query then Fetch.

+0

Sí, es muy fácil mezclar 'QUERY_AND_FETCH' y' QUERY_THEN_FETCH'. – yatskevich

Cuestiones relacionadas