python – 使用Whoosh生成搜索词建议?
作者:互联网
我在Whoosh索引中有一组文档,我想提供一个搜索词建议功能.因此,如果您输入“pop”,可能会出现一些建议:
>爆米花
>流行
>教皇
>白杨电影
>流行文化
我已经将条款作为建议进入我的索引中的NGRAMWORDS字段,但当我对该字段进行查询时,我得到自动完成的结果而不是扩展的建议 – 所以我得到标记为“pop culture”的文档“,但无法向用户显示该术语.
(为了进行比较,我在ElasticSearch中使用该字段上的完成映射执行此操作,然后使用_suggest端点获取建议.)
我只能在文档或网络上的其他地方找到自动完成或拼写更正的示例.有什么方法可以通过Whoosh从我的索引中获取搜索词建议吗?
编辑:
expand_prefix是一个在正确方向上非常需要的指针.我最终为我的建议字段使用KEYWORD(逗号= True,小写= True),并且这样的代码以最常见的第一顺序获得建议(expand_prefix和iter_prefix将按字母顺序产生它们):
def get_suggestions(term):
with ix.reader() as r:
suggestions = [(s[0], s[1].doc_frequency()) for s in r.iter_prefix('suggest', term)]
return sorted(suggestions, key=itemgetter(1), reverse=True)
解决方法:
这不是您正在寻找的,但可能可以帮助您:
reader = index.reader()
for x in r.expand_prefix('title', 'pop'):
print x
输出示例:
pop
popcorn
popular
更新
另一种解决方法是使用仅作为TEXT的关键字构建另一个索引.并使用搜索语言.我能做到的:
In [12]: list(ix.searcher().search(qp.parse('pop*')))
Out[12]:
[<Hit {'keywords': u'popcorn'}>,
<Hit {'keywords': u'popular'}>,
<Hit {'keywords': u'pope'}>,
<Hit {'keywords': u'Popular Film'}>,
<Hit {'keywords': u'pop culture'}>]
标签:whoosh,python,search-suggestion 来源: https://codeday.me/bug/20190824/1711917.html