繁体   English   中英

使用Python Whoosh进行模糊搜索

[英]Fuzzy search with Python Whoosh

我想用Python Whoosh实现模糊搜索,但我不明白。 我试图借助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))

然后按以下说明填充索引:

writer.add_document(id=unicode(row["id"]), name=unicode(row["name"]), street=unicode(row["street"]), city=unicode(row["city"]))

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

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>

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

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

相反,我创建了一个新的。

此外,在查询中,使用Term而不是FuzzyTerm至关重要,以获得合理的结果:

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

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

如您所见,我将NGRAMWORDS的最小大小增加到3,而不是2。

谢谢您的宝贵工作,马特·查普特(Matt Chaput)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM