问题描述
我们的 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
的文档
结果突出显示:Children 和 Youth 文件(注意 'h' 不是粗体)
而不是:儿童和青少年文件
我将架构更新为 minsize=2 并获得:Children 和 Youth 文件。
我也希望 'and' 成为匹配的一部分,即使它是一个停用词,因为搜索词是一个短语。我尝试将 PhrasePlugin 添加到 MultifieldParser,因为我认为默认情况下不包含它但没有区别。
感谢任何见解!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)