我在Whoosh索引中有一组文档,并且我想提供搜索项建议功能。因此,如果您输入“ pop”,可能会出现一些建议:
我有一些应该作为建议输入到索引中的NGRAMWORDS字段中的术语,但是当我对该字段进行查询时,我得到的是自动完成的结果,而不是扩展的建议-因此,我得到了标有“流行文化”字样的文档”,但无法向用户显示该术语。(为了进行比较,我将在ElasticSearch中使用该字段上的完成映射来执行此操作,然后使用_suggest端点获取建议。)
我只能在文档或网络上的其他地方找到自动完成或拼写更正的示例。使用Whoosh,有什么方法可以从索引中获得搜索词建议?
编辑: expand_prefix
是在正确方向上急需的指针。我最终KEYWORD(commas=True, lowercase=True)
在我的建议字段中使用了a ,并使用如下代码以最常见的优先顺序获取建议(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
更新
另一个解决方法是使用关键字仅将文本构建为另一个索引。并使用搜索语言。我能达到的目标:
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'}>]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句