使用Whoosh生成搜索词建议?

巴贝奇·克拉克

我在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)
德米特里·内德巴洛(Dmitry Nedbaylo)

这不是您正在寻找的确切内容,但可能可以帮助您:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章