编程语言
首页 > 编程语言> > python – 使用Whoosh生成搜索词建议?

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