斯芬克斯搜索引擎&;Python API

斯芬克斯搜索引擎&;Python API,python,sphinx,django-sphinx,Python,Sphinx,Django Sphinx,我正在尝试将Sphinx搜索引擎与他们的Python API结合使用。安装进行得很顺利。但是当我使用他们的Python API时,我并没有得到完整的结果集。我只有身份证?但当我在./bin中使用它们的./search二进制文件时,我得到了整个索引内容 使用cpp/搜索二进制文件时- ./search test 1. document=1, weight=1, group_id=1, date_added=Sat Sep 11 07:42:38 2010, title=2 id=1

我正在尝试将Sphinx搜索引擎与他们的Python API结合使用。安装进行得很顺利。但是当我使用他们的Python API时,我并没有得到完整的结果集。我只有身份证?但当我在./bin中使用它们的./search二进制文件时,我得到了整个索引内容

使用cpp/搜索二进制文件时-

./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”等字符串字段作为结果集的一部分?

您可以使用sql\u field\u string-添加到配置中

source YOUR_SOURCE
{
sql_field_string = title
sql_field_string = content
它将索引这些字段的数据,并将这些字段存储为字符串属性,这样您就可以在结果集中获得它们,而无需额外的SQL查询


然而,由于所有属性字符串属性总是加载到内存中,这就是为什么您可以很快耗尽内存的原因。

尽管这是可能的,但我认为在sphinx中存储“源”不是一个好主意。Sphinx对于一个专门的搜索引擎来说是非常快速的(如果你需要的话,只给你ID和排名分数)

顺便说一句,官方的SphinxSearchAPI几乎没有更新,您实际上可以使用MySQL驱动程序/模块(例如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()  

Query
不返回每个匹配的全文字段的内容。它只返回整数属性和文档ID(按顺序)。您必须执行额外的SQL查询才能检索文档数据。@leoluk感谢您的回复!如果你说的是真的,那么我将不得不执行额外的SQL查询来实际获取数据。我有没有办法从斯芬克斯身上得到它们?因为很明显,它的索引有相关的文本…是的,这是可能的,但是,如果我知道我是如何从中得出答案的,我会运行相同的代码,但geting error please help meThis在Sphinx常见错误中提到,并提到使用SHOW_META指令查看匹配内容的更多信息。@tmg_tt请回答此问题我已运行此查询,但未收到请求。这个@tmg_tt,我想突出显示搜索结果中匹配的文本,我们可以使用API一步完成吗?@taufikedys,我想在搜索结果中显示突出显示的文本,我们如何使用SQL查询来完成?