Sri*_*aju 8 python sphinx django-sphinx
我正在尝试将Sphinx搜索引擎与他们的Python API一起使用.安装顺利.但是当我使用他们的Python API时,我没有得到完整的结果集.我只收到身份证?但是当我在./bin中使用他们的./search二进制文件时,我得到了整个索引内容.
使用cpp ./search binary时 -
./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.
Run Code Online (Sandbox Code Playgroud)
但是当我使用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}
Run Code Online (Sandbox Code Playgroud)
如何将"title"或"content"等字符串字段作为结果集的一部分?
小智 6
尽管可以这样做,但我认为将"源"存储在sphinx中并不是一个好主意.Sphinx仅适用于专用搜索引擎(如果需要,只为您提供ID和排名分数).
顺便说一句,官方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()
Run Code Online (Sandbox Code Playgroud)
小智 4
您可以使用 sql_field_string - 添加到您的配置中
source YOUR_SOURCE
{
sql_field_string = title
sql_field_string = content
Run Code Online (Sandbox Code Playgroud)
它会索引这些字段的数据,并将这些字段存储为字符串属性,这样您就可以在结果集中获取它们,而无需额外的 SQL 查询。
然而,由于所有属性字符串属性总是加载到内存中,这就是为什么您可能会很快耗尽您的盒子内存。