2010-09-11 18 views
8

Estoy tratando de usar el motor de búsqueda Sphinx con su API de Python. La instalación fue bien. Pero cuando uso su Python API, no obtengo el conjunto completo de resultados. ¿Solo recibo la identificación? Pero cuando uso su ./search binary en ./bin obtengo todo el contenido indexado.Sphinx Search Engine & Python API

Cuando se utiliza CPP ./search binario -

./search test 

1. document=1, weight=1, group_id=1, date_added=Sat Sep 11 07:42:38 2010, title=2 
    id=1 
    group_id=1 
    group_id2=5 
    date_added=2010-09-11 07:42:38 
    title=test one 
    content=this is my test document number one. also checking search within phrases. 

Pero cuando se utiliza la API de Python, lo entiendo -

>>> import sphinxapi 
>>> client = sphinxapi.SphinxClient() 
>>> client.SetServer('127.0.0.1', 9312) 
>>> client.Query('test') 
{'status': 0, 'matches': [{'id': 1, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 1, 'title': 2}}, {'id': 2, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 1, 'title': 3}}, {'id': 4, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 2, 'title': 1}}], 'fields': ['content'], 'time': '0.022', 'total_found': 3, 'warning': '', 'attrs': [['group_id', 1], ['date_added', 2], ['title', 3]], 'words': [{'docs': 6, 'hits': 6, 'word': 'test'}], 'error': '', 'total': 3} 

¿Cómo llego a los campos de cadena como 'título' o " contenido 'como parte del conjunto de resultados?

+2

'Query' no devuelve el contenido de los campos de texto completo de cada coincidencia. Solo devuelve atributos enteros y los ID de documento (en orden). Deberá realizar una consulta SQL adicional para recuperar los datos de los documentos. – leoluk

+0

@leoluk ¡gracias por la respuesta! Si lo que dijiste es verdad, entonces tendría que realizar consultas SQL adicionales para obtener mis datos. ¿Hay alguna forma de que pueda obtenerlos de la propia Sphinx? Dado que obviamente su índice tiene el texto relevante ... –

+0

Sí, es posible, pero si supiera cómo he obtenido una respuesta – leoluk

Respuesta

4

Usted podría utilizar sql_field_string - añadir a su configuración

source YOUR_SOURCE 
{ 
sql_field_string = title 
sql_field_string = content 

lo haría datos de índice de estos campos y también almacenar estos campos como atributos de cadena por lo que podría obtener en el conjunto de resultados sin consulta SQL adicional.

Sin embargo, como todos los atributos de cadena de atributos siempre se cargan en la memoria, es por eso que puede quedarse sin memoria rápidamente.

+0

Esto se menciona en Sphinx common comete errores en http://sphinxsearch.com/blog/2014/10/14/several-common-mystakes/ y se menciona que usa la directiva SHOW_META para ver más información sobre lo que se combinó. – stommepoes

+0

@tmg_tt http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python por favor ans – Sandeep

+0

He realizado esta consulta pero no he recibido la solicitud. este http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

5

Aunque es posible hacerlo, no creo que sea una buena idea almacenar la "fuente" en sphinx. Sphinx es muy rápido para un motor de búsqueda dedicado solamente (proporcionándole solo IDs y quizás puntajes de clasificación, si lo necesita).

Por cierto, la API oficial de SphinxSearch apenas se actualiza, en realidad se puede usar el controlador/modulo de MySQL (por ejemplo, pymysql). A continuación se muestra un ejemplo:

import pymysql 
db = pymysql.connect(host='127.0.0.1',port=9301,user='',passwd='',charset='utf8',db='') 
cur = db.cursor() 
qry='SELECT id,weight() FROM idx_name WHERE MATCH(\'"your Query"/1\') LIMIT 10 OPTION ranker=SPH04' 
cur.execute(qry);row = cur.fetchall() 
print(row) 
cur.close();db.close() 
+0

http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python – Sandeep

+0

http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –