2

我对多词短语的 solr 拼写检查建议有疑问。查询“红辣椒”

q=red+chillies&wt=xml&indent=true&spellcheck=true&spellcheck.extendedResults=true&spellcheck.collate=true

我明白了

<lst name="suggestions">
  <lst name="chillies">
    <int name="numFound">2</int>
    <int name="startOffset">4</int>
    <int name="endOffset">12</int>
    <int name="origFreq">0</int>
    <arr name="suggestion">
      <lst><str name="word">chiller</str><int name="freq">4</int></lst>
      <lst><str name="word">challis</str><int name="freq">2</int></lst>
    </arr>
  </lst>
  <bool name="correctlySpelled">false</bool>
  <str name="collation">red chiller</str>
</lst>

问题是,即使“chiller”在索引中有 4 个结果,“red chiller”也没有。所以我们最终建议了一个结果为 0 的短语。

我该怎么做才能使拼写检查仅对整个短语起作用?我尝试在查询中使用 KeywordTokenizerFactory:

<fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

我也尝试添加

<str name="sp.query.extendedResults">false</str>

<lst name="spellchecker">

在 solrconfig.xml 中。

但两者似乎都没有什么不同。

使拼写检查仅给出对整个短语有结果的排序规则的最佳方法是什么?谢谢!

4

1 回答 1

0

这里真正的问题是您需要指定spellcheck.collateParam.q.op=AND以及(可选)spellcheck.collateParam.mm=100% 这些参数强制正确执行整理查询。

您可以在solr 文档上阅读更多相关信息

于 2018-07-03T08:22:50.013 回答