【问题标题】:Fuzzy search with Python Whoosh使用 Python Whoosh 进行模糊搜索
【发布时间】:2017-08-07 21:57:54
【问题描述】:

我想用 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)

我在搜索“阿里”时得到零次点击:

<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>

【问题讨论】:

    标签: python whoosh


    【解决方案1】:

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

    打开
    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 的 minsize 增加到 3 而不是 2。

    感谢您的宝贵工作,Matt Chaput。

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2016-01-18
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多