Solr 我们可以使用WhitespaceTokenizerFactory&;将StandardToken组合在一起以仅接受少数特定符号?

Solr 我们可以使用WhitespaceTokenizerFactory&;将StandardToken组合在一起以仅接受少数特定符号?,solr,lucene,solr-schema,Solr,Lucene,Solr Schema,在我的场景中,我需要同时使用WhitespaceTokenizerFactory和StandardTokenizerFactory。 有什么方法可以同时使用它们吗?? 我的场景如下所示: 1.我用WhitespaceTokenizerFactory搜索词如C++或C++。br/> 2.但是,在本例中,如果我搜索SQL(使用逗号),则结果仅为SQL,模式将出现 预期结果:搜索查询必须视为SQL 我的schema.xml如下所示 <fieldType name="text_genera

在我的场景中,我需要同时使用WhitespaceTokenizerFactory和StandardTokenizerFactory。 有什么方法可以同时使用它们吗?? 我的场景如下所示:
1.我用WhitespaceTokenizerFactory搜索词如C++或C++。br/> 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>

如果要使用两种不同的标记化方案,应使用所需的分析设置将内容复制到多个字段中。Solr使用它的功能使这变得很容易

因此可以定义字段类型:

<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" />





我已经创建了复制字段并重新编制了索引,但无法从复制字段中搜索特殊符号是没有用的
查询参数:
“params”:{“indent”:“true”,“q”:“,”u”:“1450672539308”,“wt”:“json”,“fq”:“FEEDBACK2:\“C++\”}看起来FEEDBACK2使用的是标准分析,所以它当然不匹配。您需要使用适合用例的字段,或者您可以始终查询这两个字段。我需要一个既适用于C++/C#又适用于SQL的字段(注意逗号)……如果我只使用WhitespaceTokenizerFactory,则在空格上进行索引,并搜索SQL,结果仅为SQL,而不是SQL。这就是我建议查询这两个字段的原因。