Sphinx Search Engine и Python API - PullRequest
       26

Sphinx Search Engine и Python API

8 голосов
/ 12 сентября 2010

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

При использовании двоичного файла 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}

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

Ответы [ 2 ]

5 голосов
/ 11 апреля 2016

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

Кстати, официальный API SphinxSearch практически не обновляется, вы можете использовать MySQL driver / 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()  
4 голосов
/ 27 мая 2011

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

source YOUR_SOURCE
{
sql_field_string = title
sql_field_string = content

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

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

...