3

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

1 回答 1

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" />
于 2015-12-15T17:42:53.590 回答