Search solr对字母数字字段的部分搜索不起作用
我正在使用Solr4.4.0。我想在其中一个文件上启用部分搜索,即搜索键Search solr对字母数字字段的部分搜索不起作用,search,solr,lucene,Search,Solr,Lucene,我正在使用Solr4.4.0。我想在其中一个文件上启用部分搜索,即搜索键abc将返回所有具有文件值的文档,如abc123、abc125等。我正试图通过EdgeNGramFilterFactory执行此操作 My schema.xml: <fields> <field name="variant_sku" type="string" indexed="false" stored="false" required="false" multiValued="false" />
abc
将返回所有具有文件值的文档,如abc123
、abc125
等。我正试图通过EdgeNGramFilterFactory
执行此操作
My schema.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>
还尝试:
<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>
也不行 使用带有splitOnNumerics=1选项的WordDelimiterFilterFactory在您的情况下应该可以正常工作。您不需要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场
如果您还可以发布搜索查询url,这将非常有用。在您的情况下,使用带有splitOnNumerics=1选项的WordDelimiterFilterFactory应该可以正常工作。您不需要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场
如果您还可以发布搜索查询url,这将非常有用。在您的情况下,使用带有splitOnNumerics=1选项的WordDelimiterFilterFactory应该可以正常工作。您不需要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场
如果您还可以发布搜索查询url,这将非常有用。在您的情况下,使用带有splitOnNumerics=1选项的WordDelimiterFilterFactory应该可以正常工作。您不需要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场
如果您还可以发布您的搜索查询url,那将很有帮助。此设置对我来说运行良好
<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>
此设置对我来说运行良好
<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>
此设置对我来说运行良好
<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>
此设置对我来说运行良好
<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>
solr分析页面提供了索引和查询的良好视图。你能在那里检查一下abc的索引和搜索是否如预期的那样吗?您的数据是否包含abc?@D_K:我在分析页面中得到以下信息文本原始字节开始结束类型位置psjai[70 73 6a 61 69]0 5 1 SF文本原始字节类型位置开始结束psjai[70 73 6a 61 69]1 0 5 LCF文本原始字节位置开始结束类型psjai[70 73 6a 61 69]1 0 5
@D_K我仅以abc为例。我的查询是psjai,这看起来像一个查询端分析输出。对于应该匹配psjai的真实数据,索引端分析是什么样子的?也许,您可以添加一个屏幕截图?@D_K:索引端分析是可行的:psjai断到ps
,psj
,psja
和psjai
solr分析页面提供了索引和查询的非常好的视图。你能在那里检查一下abc的索引和搜索是否如预期的那样吗?您的数据是否包含abc?@D_K:我在分析页面中得到以下信息文本原始字节开始结束类型位置psjai[70 73 6a 61 69]0 5 1 SF文本原始字节类型位置开始结束psjai[70 73 6a 61 69]1 0 5 LCF文本原始字节位置开始结束类型psjai[70 73 6a 61 69]1 0 5
@D_K我仅以abc为例。我的查询是psjai,这看起来像一个查询端分析输出。对于应该匹配psjai的真实数据,索引端分析是什么样子的?也许,您可以添加一个屏幕截图?@D_K:索引端分析是可行的:psjai断到ps
,psj
,psja
和psjai
solr分析页面提供了索引和查询的非常好的视图。你能在那里检查一下abc的索引和搜索是否如预期的那样吗?您的数据是否包含abc?@D_K:我在分析页面文本原始字节开始结束类型位置psjai[70 73 6a 61 69]0 5 1 SF文本原始字节类型位置开始结束psjai[70 73 6a 61 69]1 0 5 LCF文本原始字节位置开始结束类型psjai