Whoosh 使用 NGramWordAnalyzer 突出显示结果

问题描述

我们的 whoosh 模式使用 NGramAnalyzer(minsize=4)。我正在使用 highlight.SentenceFragmenter 以粗体突出显示匹配结果。 匹配以最小大小(4,在模式中定义)的块返回,因此突出显示半字看起来很有趣。有没有办法配置为贪婪(也就是突出显示整个单词/短语)?

ngram_analyzer = analysis.NgramWordAnalyzer(minsize=4)
schema = Schema(
    title=TEXT(analyzer=ngram_analyzer,stored=True,field_boost=2.0),subtitle=TEXT(analyzer=ngram_analyzer,stored=True),description=TEXT(analyzer=ngram_analyzer,notes=TEXT(analyzer=ngram_analyzer,key_words=TEXT(analyzer=ngram_analyzer,path=STORED,id=NUMERIC(stored=True),datamart_id=NUMERIC(stored=True),)

# create index...
# get search_term...

with ix.searcher() as searcher:
    parser = MultifieldParser(
        ["title","subtitle","description","notes","key_words"],ix.schema
    )
    parser.add_plugin(Wildcardplugin)
    #parser.add_plugin(PhrasePlugin)
    query = parser.parse(search_term)
    results = searcher.search(query,limit=None)
    results.fragmenter = highlight.SentenceFragmenter(charlimit=100000,maxchars=200)

    # iterate through results...

例如,使用 search_term "Children and Youth" 和包含 Children and Youth Files 的文档

结果突出显示ChildrenYouth 文件(注意 'h' 不是粗体)

而不是:儿童和青少年文件

我将架构更新为 minsize=2 并获得:ChildrenYouth 文件

我也希望 'and' 成为匹配的一部分,即使它是一个停用词,因为搜索词是一个短语。我尝试将 PhrasePlugin 添加到 MultifieldParser,因为我认为认情况下不包含它但没有区别。

感谢任何见解!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)