Python-Whoosh模糊搜索

2024-04-25 09:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用pythonwhoosh实现模糊搜索,但我不明白。我试图借助NGRAMWORDS使模糊搜索成为可能。在

这是我的计划:

schema = Schema(id=ID(stored=True), 
                name=NGRAMWORDS(minsize=2, maxsize=4, stored=True, queryor=True), 
                street=NGRAMWORDS(minsize=2, maxsize=4, stored=True, queryor=True), 
                city=NGRAMWORDS(minsize=2, maxsize=4, stored=True, queryor=False))

然后将索引填写如下:

^{pr2}$

不幸的是,在搜索时,不会从索引中检索到任何结果:

with self.index.searcher() as searcher:
from whoosh.query import Term, Or, FuzzyTerm
from whoosh.analysis import NgramWordAnalyzer

ngramAnalyzer = NgramWordAnalyzer(minsize=2, maxsize=4)
tokens = [token.text for token in ngramAnalyzer(unicode(name))]
fetig = list()
for t in tokens:
 tt = FuzzyTerm("name", unicode(t))
 fetig.append(tt)

myQuery = Or(fetig)
res = searcher.search(myQuery, limit=10)

当我搜索“Ali”时,我的点击率为零:

<Top 0 Results for Or([FuzzyTerm('name', u'al', boost=1.000000, maxdist=1, prefixlength=1), FuzzyTerm('name', u'ali', boost=1.000000, maxdist=1, prefixlength=1), FuzzyTerm('name', u'li', boost=1.000000, maxdist=1, prefixlength=1)]) runtime=0.000411987304688>

Tags: ornametrueforboostsearchermaxsizestored
1条回答
网友
1楼 · 发布于 2024-04-25 09:11:13

现在解决了。问题是已经存在的索引没有通过打开

index = open_dir("index", schema=self.schema)

相反,我创造了一个新的。在

此外,在查询中,使用术语而不是FuzzyTerm是为了得到合理的结果:

^{pr2}$

如你所见,我将NGRAMWORDS的minsize从2增加到了3。在

谢谢你的宝贵工作,马特·查普特。在

相关问题 更多 >

    热门问题