索引和搜索N图

概述

N-gram索引是一种快速实现“键入时搜索”功能的强大方法,如iTunes。它也有助于快速和有效的索引语言,如中文和日语,没有断字。

n-grams指的是n个字符组…大字是由两个字符组成的组,三元是由三个字符组成的组,等等。

whoosh包括两种分析n-gram字段的方法:n-gram标记器和将标记分解为n-gram的过滤器。

whoosh.analysis.NgramTokenizer 将整个字段标记化为n-grams。这对于中文/日文/韩文更有用,因为在这些语言中,索引字符的双字符而不是单个字符是很有用的。将此标记器与罗马语言一起使用会导致标记中出现空格。

>>> ngt = NgramTokenizer(minsize=2, maxsize=4)
>>> [token.text for token in ngt(u"hi there")]
[u'hi', u'hi ', u'hi t',u'i ', u'i t', u'i th', u' t', u' th', u' the', u'th',
u'the', u'ther', u'he', u'her', u'here', u'er', u'ere', u're']

whoosh.analysis.NgramFilter 作为分析管道的一部分,将单个令牌分解为n个g。这对于单词分离的语言更有用。

>>> my_analyzer = StandardAnalyzer() | NgramFilter(minsize=2, maxsize=4)
>>> [token.text for token in my_analyzer(u"rendering shaders")]
[u'ren', u'rend', u'end', u'ende', u'nde', u'nder', u'der', u'deri', u'eri',
u'erin', u'rin', u'ring', u'ing', u'sha', u'shad', u'had', u'hade', u'ade',
u'ader', u'der', u'ders', u'ers']

whoosh包括两种预先配置的n-gram字段类型: whoosh.fields.NGRAMwhoosh.fields.NGRAMWORDS . 唯一的区别是 NGRAM 通过n-gram过滤器运行所有文本,包括空格和标点符号,同时 NGRAMWORDS 使用记号赋予器从文本中提取单词,然后通过n-gram过滤器运行每个单词。

TBD。