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
如何在solr 7.7上启用模糊搜索?_Solr - Fatal编程技术网

如何在solr 7.7上启用模糊搜索?

如何在solr 7.7上启用模糊搜索?,solr,Solr,我试图对标题文本进行模糊搜索,但solr没有对拼写错误的品牌名称“hilfinger”查询给出任何结果: 使用标准搜索,我将获得关于正确命名hilfiger的结果: 在solr的配置中是否需要激活某些东西以启用模糊搜索,或者获得0个结果的原因是什么?是!你可以。您只需在schema.xml中正确配置要启用模糊搜索或部分匹配的字段。您可以在索引期间向所需字段添加过滤器,以告知Solr除了原始值之外还存储每个值的值。稍后,可以在此字段上执行模糊搜索。默认情况下存在两种类型的过滤器,您只需将它们附加到

我试图对标题文本进行模糊搜索,但solr没有对拼写错误的品牌名称“hilfinger”查询给出任何结果:

使用标准搜索,我将获得关于正确命名hilfiger的结果:


在solr的配置中是否需要激活某些东西以启用模糊搜索,或者获得0个结果的原因是什么?

是!你可以。您只需在
schema.xml
中正确配置要启用模糊搜索或部分匹配的字段。您可以在索引期间向所需字段添加过滤器,以告知Solr除了原始值之外还存储每个值的值。稍后,可以在此字段上执行模糊搜索。默认情况下存在两种类型的过滤器,您只需将它们附加到索引分析器过滤器链

  • -仅匹配前缀和后缀(仅匹配搜索短语的边)
  • -匹配短语中任意位置的ngrams
在这两种情况下,您都必须定义在索引期间生成的NGRAM的最小和最大大小。(请注意,这也会增加索引的大小。)让我们使用过滤器在schema.xml中定义标题字段

<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
   </analyzer>
</fieldType>

此处,配置将NGRAM的最小大小定义为2个字母,最大为15个字母。 您可以通过替换行来更改过滤器,以从字段值的任何位置启用部分匹配

<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>

有,


字段的类型是什么?词干化可能会影响存储的标记,这意味着hilfiger词干化为hilfig,并且这比默认编辑距离离hilfinger更远。
<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
   </analyzer>
</fieldType>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>