Solr 我们可以使用WhitespaceTokenizerFactory&;将StandardToken组合在一起以仅接受少数特定符号?
在我的场景中,我需要同时使用WhitespaceTokenizerFactory和StandardTokenizerFactory。 有什么方法可以同时使用它们吗?? 我的场景如下所示: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
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。这就是我建议查询这两个字段的原因。