建议没有使用comparatorFreq=freq对频率进行排序(不工作)



我在Solr中创建了两个具有2个碎片的节点。我正在使用拼写更正技术。我想根据频率查询(abple)建议进行排序。默认情况下,是在分数(Levenstein距离)上排序

我在solrconfig.xmlsolr.SpellCheckComponent中添加了<str name="comparatorClass">freq</str>。但它仍然不起作用。

当前建议按分数排序(不需要):

"suggestion":[{
            "word":"apple",
            "freq":23},
          {
            "word":"ample",
            "freq":5},
          {
            "word":"abele",
            "freq":3},
          {
            "word":"able",
            "freq":176}}]

要求建议按频率排序(必需):

"suggestion":[{
            "word":"able",
            "freq":176}},
          {
            "word":"apple",
            "freq":23},
          {
            "word":"ample",
            "freq":5},
          {
            "word":"abele",
            "freq":3}}]

配置文件:

solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">textSpellCi</str>
    <lst name="spellchecker">
      <str name="name">default</str>
      <str name="field">gram_ci</str>
      <str name="classname">solr.DirectSolrSpellChecker</str>
      <str name="distanceMeasure">internal</str>
      <float name="accuracy">0.5</float>
      <int name="maxEdits">2</int>
      <int name="minPrefix">0</int>
      <int name="maxInspections">5</int>
      <int name="minQueryLength">2</int>
      <float name="maxQueryFrequency">0.9</float>
      <str name="comparatorClass">freq</str>
    </lst>
</searchComponent>
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="df">gram_ci</str>
      <str name="spellcheck.dictionary">default</str>
      <str name="spellcheck">on</str>
      <str name="spellcheck.extendedResults">true</str>
      <str name="spellcheck.count">25</str>
      <str name="spellcheck.onlyMorePopular">true</str>
      <str name="spellcheck.maxResultsForSuggest">100000000</str>
      <str name="spellcheck.alternativeTermCount">25</str>
      <str name="spellcheck.collate">true</str>
      <str name="spellcheck.maxCollations">50</str>
      <str name="spellcheck.maxCollationTries">50</str>
      <str name="spellcheck.collateExtendedResults">true</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>

Schema.xml:

<field name="gram_ci" type="textSpellCi" indexed="true" stored="true" multiValued="false"/>
</fieldType><fieldType name="textSpellCi" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="5" minShingleSize="2" outputUnigrams="true"/>
</analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="5" minShingleSize="2" outputUnigrams="true"/>
</analyzer>
</fieldType>

我遇到了类似的问题,但它对我起到了作用,做出了你提到的改变:

<str name="comparatorClass">freq</str>

您可能尚未重新启动solr实例。试着先这样做。

将此参数添加到搜索处理程序后尝试:

<str name="spellcheck.onlyMorePopular">true</str>

最新更新