2010-09-11 11 views
8

Ich versuche, Sphinx Search Engine mit ihrer Python API zu verwenden. Die Installation lief gut. Aber wenn ich ihre Python-API benutze, erhalte ich nicht die vollständige Ergebnismenge. Ich bekomme nur die IDs? Aber wenn ich ihre ./search-Binärdatei in ./bin verwende, erhalte ich den gesamten indizierten Inhalt.Sphinx Search Engine & Python API

Wenn cav mit ./search binär -

./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. 

Aber wenn ich die Python-API verwenden, erhalte ich -

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

Wie erhalte ich die String-Felder wie 'Titel' oder " Inhalt 'als Teil der Ergebnismenge?

+2

'Query' nicht den Inhalt der Volltext Felder jedes Spiel zurückzukehren. Es gibt nur ganzzahlige Attribute und die Dokument-IDs (in der Reihenfolge) zurück. Sie müssen zusätzliche SQL-Abfragen durchführen, um die Dokumentendaten abzurufen. – leoluk

+0

@leoluk danke für die Antwort! Wenn das, was Sie gesagt haben, wahr ist, müsste ich zusätzliche SQL-Abfragen durchführen, um meine Daten tatsächlich zu erhalten. Kann ich sie irgendwie von Sphinx selbst bekommen? Da offensichtlich hat seinen Index der entsprechende Text ... –

+0

Ja, es ist möglich, aber wenn ich wusste, wie ich eine Antwort aus ihm gemacht hatte – leoluk

Antwort

4

Sie könnten sql_field_string verwenden - in der Config-

source YOUR_SOURCE 
{ 
sql_field_string = title 
sql_field_string = content 

es würde Indexdaten dieser Felder und speichert diese Felder auch als String-Attribut so könnte man sich in der Ergebnismenge ohne zusätzliche SQL-Abfrage erhalten.

Da jedoch alle Attribute-String-Attribute immer in den Speicher geladen werden, könnten Sie schnell aus dem Speicher Ihrer Box auslaufen.

+0

diese Sphinx gemeinsam erwähnt wird Fehler http://sphinxsearch.com/blog/2014/10/14/several-common-mystakes/ und es wird erwähnt die SHOW_META Richtlinie nutzen, um mehr Informationen zu sehen, was abgestimmt wurde. – stommepoes

+0

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

+0

ich diese Abfrage ausgeführt haben, aber nicht Anfrage erhalten. diese http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

5

Obwohl es möglich ist, glaube ich nicht, dass es eine gute Idee ist, die "Quelle" in Sphinx zu speichern. Sphinx ist sehr schnell für eine spezielle Suchmaschine (mit nur IDs und vielleicht Ranglisten - wenn Sie es brauchen).

Btw, Offizielle SphinxSearch API ist kaum aktualisiert, Sie können tatsächlich MySQL Treiber/Modul (z. B. pymysql) verwenden. Es folgt ein Beispiel:

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 –