我正在使用solr 4.4.0。我想在其中一个文件上启用部分搜索,即搜索键abc
将返回所有文件,其归档值为abc123
,abc125
等。我试图通过{{ 1}}。
我的schema.xml:
EdgeNGramFilterFactory
我的solrconfig.xml:
<fields>
<field name="variant_sku" type="string" indexed="false" stored="false" required="false" multiValued="false" />
<field name="parsku" type="text_sku" indexed="true" stored="true" multiValued="false" />
</fields>
<copyField source="variant_sku" dest="parsku"/>
<copyField source="parsku" dest="allText"/>
<fieldType name="text_sku" class="solr.TextField" omitNorms="false">
<analyzer type = "index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StandardFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
</analyzer>
<analyzer type = "query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StandardFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
我重新加载并在进行架构更改后进行了完整的数据导入。但部分搜索没有出现。查询<requestHandler name="/query" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="wt">json</str>
<str name="indent">true</str>
<str name="df">allText</str>
</lst>
</requestHandler>
编辑:将@__K建议的field_type更改为:
abc
也尝试过:
<fieldType name="text_sku" class="solr.TextField" omitNorms="false">
<analyzer type = "index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateAll="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type = "query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateAll="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
但仍面临同样的问题。
EDIT2 :尝试了解决方案here
<fieldType name="text_sku" class="solr.TextField" omitNorms="false">
<analyzer type = "index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type = "query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateAll="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
不工作!!
答案 0 :(得分:2)
将WordDelimiterFilterFactory与splitOnNumerics = 1选项一起使用应该可以正常工作。您不需要NGram过滤器,因为这会对您的索引造成过度杀伤。
所以这应该足够了:
<fieldType name="text_sku" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateAll="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
很少有事情要注意:
如果更改架构,请重新索引文档。基本上,当您更改索引时间中使用的任何过滤器时。
检查您要搜索的字段。我可以看到你正在设置df到allText,而你正在改变parsku字段的类型。所以我希望这不仅仅是一个错误,所以请确保搜索parsku字段。
如果您也可以发布搜索查询网址,那将会很有帮助。
答案 1 :(得分:1)
此设置适用于我
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type = "index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type = "query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateAll="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>