2010-09-11 3 views
8

Я пытаюсь использовать Sphinx Search Engine с их API Python. Установка прошла нормально. Но когда я использую их Python API, я не получаю полный набор результатов. Я получаю только идентификаторы? Но когда я использую их ./search двоичный файл ./bin, я получаю весь проиндексированный контент.Sphinx Search Engine & Python API

При использовании CPP ./search бинарная -

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

Но когда я использую Python API, я получаю -

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

Как получить строковые поля, такие как 'название' или " content 'как часть набора результатов?

+2

'Query' не возвращает содержимое полей полного текста каждого совпадения. Он возвращает только целочисленные атрибуты и идентификаторы документов (в порядке). Вам потребуется выполнить дополнительный SQL-запрос для извлечения данных документов. – leoluk

+0

@leoluk благодарит за отзыв! Если то, что вы сказали, верно, тогда мне придется выполнять дополнительные SQL-запросы, чтобы фактически получить мои данные. Есть ли способ получить их от самого Сфинкса? Поскольку, очевидно, индекс имеет соответствующий текст ... –

+0

Да, это возможно, но если бы я знал, как я сделал ответ из него – leoluk

ответ

4

Вы можете использовать sql_field_string - добавить к вашей конфигурации

source YOUR_SOURCE 
{ 
sql_field_string = title 
sql_field_string = content 

было бы индексировать данные этих полей, а также хранить эти поля в качестве строки атрибутов, чтобы вы могли получить их в результирующий набор без дополнительного запроса SQL.

Однако, поскольку все атрибуты атрибутов строки всегда загружаются в память, поэтому вы можете быстро разрядиться из памяти вашего окна.

+0

Это упоминается в Sphinx common ошибки http://sphinxsearch.com/blog/2014/10/14/several-common-mystakes/, и упоминается, что для использования дополнительной информации о том, что было сопоставлено, используется директива SHOW_META. – stommepoes

+0

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

+0

Я запустил этот запрос, но не получил запрос. это http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

5

Хотя это можно сделать, я не думаю, что это хорошая идея сохранить «источник» в сфинксе. Sphinx работает очень быстро только для выделенной поисковой системы (давая вам только идентификаторы и, возможно, рейтинг баллов - если вам это нужно).

Btw, официальный SphinxSearch API вряд ли обновляется, вы можете фактически использовать драйвер MySQL/modul (например, pymysql). Ниже приведен пример:

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 –