2010-09-11 15 views
8

Sto provando a usare Sphinx Search Engine con le loro API Python. L'installazione è andata bene. Ma quando uso la loro API Python non ottengo il set di risultati completo. Ho solo l'ID? Ma quando uso il loro ./search binary in ./bin ottengo l'intero contenuto indicizzato.Sphinx Search Engine & Python API

Quando si usa 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. 

Ma quando uso l'API di Python, ottengo -

>>> 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} 

Come faccio ad avere i campi stringa come 'titolo' o ' contenuto 'come parte del set di risultati?

+2

'Query' non restituisce il contenuto dei campi di testo completo di ogni corrispondenza. Restituisce solo gli attributi interi e gli ID dei documenti (in ordine). Dovrai eseguire una query SQL aggiuntiva per recuperare i dati dei documenti. – leoluk

+0

@leoluk grazie per la risposta! Se ciò che hai detto è vero, dovrei eseguire query SQL aggiuntive per ottenere effettivamente i miei dati. C'è un modo per ottenerli dalla Sfinge stessa? Dal momento che ovviamente l'indice ha il testo pertinente ... –

+0

Sì, è possibile, ma se sapessi come ho ottenuto una risposta da esso – leoluk

risposta

4

Si potrebbe utilizzare sql_field_string - aggiungere alla propria configurazione

source YOUR_SOURCE 
{ 
sql_field_string = title 
sql_field_string = content 

farebbe dati dell'indice di questi campi e anche memorizzare questi campi come attributi stringa in modo che si potrebbe ottenere nel vostro set di risultati senza query SQL aggiuntivo.

Tuttavia, poiché tutti gli attributi di stringa degli attributi vengono sempre caricati in memoria, è possibile che si esaurisca rapidamente la memoria della scatola.

+0

Questo è menzionato in comune Sfinge errori http://sphinxsearch.com/blog/2014/10/14/several-common-mystakes/ ed è menzionato per usare la direttiva SHOW_META per vedere più informazioni di ciò che è stato abbinato. – stommepoes

+0

@tmg_tt http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python please an this this – Sandeep

+0

Ho eseguito questa query ma non ho ricevuto la richiesta. questo http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

5

Sebbene sia possibile farlo, non penso che sia una buona idea memorizzare la "fonte" nella sfinge. La Sfinge è molto veloce solo per un motore di ricerca dedicato (fornendoti solo ID e forse punteggi di classifica - se ne hai bisogno).

Btw, l'API SphinxSearch ufficiale è appena aggiornata, è possibile utilizzare effettivamente MySQL driver/modul (ad esempio pymysql). Di seguito è riportato un esempio:

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-error-python – Sandeep

+0

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