2

我的 solr 设置有问题。它没有在选择处理程序中搜索“canaDa”,因为它是“canada”。

这是 fieldtype 的架构text_en_splitting(它们都很重要):

<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>

  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

.

这是选择处理程序的 solrconfig 设置:

<requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">20</int>
       <str name="df">text</str>

       <str name="defType">edismax</str>
       <str name="qf">court_id^0.1 jurisdiction^1.0 jur_code^0.5 court_name^1.5 court_code^0.5 court_type^1.0</str>
       <str name="mm">80%</str>
       <str name="q.alt">*:*</str>
       <str name="fl">*</str>
     </lst>

.

这是 solr admin 的查询分析工具: 在此处输入图像描述 .

如您所见,查询分析确实将其破坏为“canaDa”,但搜索找不到它......

4

1 回答 1

1

text_en_splitting根据fieldType 的配置方式,您在此处看到的行为是正确的。使用此配置,“canaDa”将匹配的唯一方法是如果索引词也是“canaDa”,b/c 这样它们都将被拆分为“cana”和“da”。如果您希望“canaDa”与“canada”匹配,那么我建议您删除其中的splitOnCaseChange=1选项,WordDelimiterFilterFactory因为这是导致问题的原因。

如果无法删除splitOnCaseChange设置,您能否在问题中更详细地解释您的要求和预期行为,以便我们帮助您找到可行的解决方案。

于 2013-05-29T17:13:46.100 回答