我们可以使用WhitespaceTokenizerFactory& StandardToken一起只接受几个特定符号?

时间:2015-12-14 11:18:08

标签: solr lucene solr-schema

在我的场景中,我需要使用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>

1 个答案:

答案 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" />
相关问题