我现在正在使用Solr来索引字段。该字段包含中文和英文。同时,我需要使用tokenizer NGramTokenizerFactory进行搜索。
以下是我为该字段定义的当前字段类型:
<fieldType name="text_general2" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="15"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="15"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我必须设置minGramSize="1"
才能搜索单个中文字符。但是,这对于搜索英语单词来说是完全不合适的。
e.g。如果我搜索“看”,则返回“s”,“se”,“ee”,“see”,“e”
因此,有谁能告诉我们对包含中文和英文的字段进行索引的最佳方法是什么?
答案 0 :(得分:2)
我确定这不是您希望得到的答案,但它实际上是解决问题的答案:不要使用单个字段< / em>包含两者中文和英文。
有一个英语字段和一个中文字段,索引到与输入内容语言相匹配的字段。您可以使用更新处理器中的Language Detection功能让索尔决定在编制索引时将内容放入哪个字段(如果您在编制索引时不知道该语言)。
然后在两个字段中进行搜索(取决于您的查询处理程序,可能使用qf
),允许针对每个字段单独处理每种语言的标记(以便英语单词不会得到ngram -ed)。
如果您在同一文档中同时使用英文和中文,请处理文档以确定中文和英文部分(例如,在索引到不同字段之前迭代每个段落并检测语言)。