Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search solr对字母数字字段的部分搜索不起作用_Search_Solr_Lucene - Fatal编程技术网

Search solr对字母数字字段的部分搜索不起作用

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

我正在使用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" />
  <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