在我的场景中,我需要使用WhitespaceTokenizerFactory& StandardTokenizerFactory在一起。
有没有办法一起使用它们?
我的情景看起来像这样:
1.我使用WhitespaceTokenizerFactory搜索C#或C ++等单词。
2.但是,在这种情况下,如果我搜索 SQL,(使用逗号),则只显示 SQL,模式的结果。
预期结果:搜索查询必须被视为 SQL 。
我的schema.xml如下所示
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:0)
如果要使用两种不同的标记化方案,则应使用所需的分析设置将内容复制到多个字段中。 Solr使用它copyFields使其变得简单。
所以你可以定义fieldTypes:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_standard" class="solr.TextField" positionIncrementGap="100">
<analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
</fieldType>
然后定义一个copyField,例如:
<copyField source="myTextField_whitespace" dest="myTextField_standard" />