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 6.4.1 Suggester顽固区分大小写,如何使其不区分大小写?_Solr_Autocomplete_Case Insensitive_Search Suggestion - Fatal编程技术网

SOLR 6.4.1 Suggester顽固区分大小写,如何使其不区分大小写?

SOLR 6.4.1 Suggester顽固区分大小写,如何使其不区分大小写?,solr,autocomplete,case-insensitive,search-suggestion,Solr,Autocomplete,Case Insensitive,Search Suggestion,我已经尝试了sun下的所有方法(毕竟它被称为solr)使solr建议不区分大小写,但它仍然顽固地区分大小写 这返回了墨西哥人的建议: http://localhost:8983/solr/mycollection/autocomplete?suggest.q=Mex 这将返回0个结果: http://localhost:8983/solr/mycollection/autocomplete?suggest.q=mex 为了进一步诊断,我尝试对我的建议字段进行小写/选择搜索,该字段成功返回包含

我已经尝试了sun下的所有方法(毕竟它被称为solr)使solr建议不区分大小写,但它仍然顽固地区分大小写

这返回了墨西哥人的建议:

http://localhost:8983/solr/mycollection/autocomplete?suggest.q=Mex
这将返回0个结果:

http://localhost:8983/solr/mycollection/autocomplete?suggest.q=mex
为了进一步诊断,我尝试对我的建议字段进行小写/选择搜索,该字段成功返回包含“墨西哥”的文档:

但在Suggester中使用小写字母是不可能的。这就好像我的
在被建议者使用时没有效果

在测试之前,我当然进行了完整的配置上传、集合重新加载、数据重新索引和建议重建。我在Solr6.4.1上以云模式运行。有什么想法吗?诊断提示

schema.xml

 <fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
 </fieldType>

<field name="recipe" type="text_general" indexed="true" stored="true" multiValued="false" />

<field name="suggestions" type="textSuggest" indexed="true" stored="true" multiValued="true" />

<copyField source="recipe" dest="suggestions"/>
  <searchComponent class="solr.SuggestComponent" name="suggest">
    <lst name="suggester">
      <str name="name">foodsuggester</str>
      <str name="lookupImpl">WFSTLookupFactory</str>
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>
      <str name="field">suggestions</str>
      <str name="buildOnStartup">false</str>
      <str name="buildOnCommit">false</str>
      <str name="storeDir">suggester_wfst_dir</str>
      <str name="suggestAnalyzerFieldType">textSuggest</str>
    </lst>
  </searchComponent>

  <requestHandler name="/autocomplete" class="solr.SearchHandler" startup="lazy">
      <lst name="defaults">
        <str name="suggest">true</str>
        <str name="suggest.dictionary">foodsuggester</str>
        <str name="suggest.count">10</str>
      </lst>
      <arr name="components">
        <str>suggest</str>
      </arr>
  </requestHandler>

solrconfig.xml

 <fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
 </fieldType>

<field name="recipe" type="text_general" indexed="true" stored="true" multiValued="false" />

<field name="suggestions" type="textSuggest" indexed="true" stored="true" multiValued="true" />

<copyField source="recipe" dest="suggestions"/>
  <searchComponent class="solr.SuggestComponent" name="suggest">
    <lst name="suggester">
      <str name="name">foodsuggester</str>
      <str name="lookupImpl">WFSTLookupFactory</str>
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>
      <str name="field">suggestions</str>
      <str name="buildOnStartup">false</str>
      <str name="buildOnCommit">false</str>
      <str name="storeDir">suggester_wfst_dir</str>
      <str name="suggestAnalyzerFieldType">textSuggest</str>
    </lst>
  </searchComponent>

  <requestHandler name="/autocomplete" class="solr.SearchHandler" startup="lazy">
      <lst name="defaults">
        <str name="suggest">true</str>
        <str name="suggest.dictionary">foodsuggester</str>
        <str name="suggest.count">10</str>
      </lst>
      <arr name="components">
        <str>suggest</str>
      </arr>
  </requestHandler>

食物建议者
WFSTLookupFactory
文档字典工厂
建议
假的
假的
建议者(wfst)主任
短信建议
真的
食物建议者
10
建议

似乎WFSTLookupFactory查找实现区分大小写

如果您没有使用WFSTLookupFactory的任何具体原因,可以使用FuzzyLookupFactory

<str name="lookupImpl">FuzzyLookupFactory</str>
FuzzyLookupFactory

WFSTLookupFactory显然没有使用
suggestAnalyzerFieldType
参数,因此被忽略。您可以使用
AnalyzingLookupFactory
,它将根据
suggestAnalyzerFieldType
分析文本。因此,如果您只希望在suggester中分析小写,您可以使用
SuggestalAnalyzerFieldType
,并通过
SuggestalAnalyzerFieldType

表明您希望使用suggestText字段类型进行分析。嘿,您说得对!FuzzyLookupFactory确实做到了!唯一的问题是,我不想要模糊的结果,我只想要精确的不区分大小写的建议。这是一个很大的进步,谢谢。通过添加40,fuzzy factory只返回完全不区分大小写的匹配,这意味着前40个字符必须完全匹配(不考虑大小写)。它工作得非常完美,仍然允许更短的精确匹配,比如在我的例子中。