排序规则在Solr中无法正常工作

排序规则在Solr中无法正常工作,solr,collation,spell-checking,search-suggestion,Solr,Collation,Spell Checking,Search Suggestion,我正在Solr中进行拼写检查。我已经在拼写检查器组件中实现了建议和排序规则 Most of the time collations work fine but in few case it fails. 工作: solrconfig.xml: <searchComponent name="spellcheck" class="solr.SpellCheckComponent"> <str name="queryAnalyzerFieldType">textSp

我正在Solr中进行拼写检查。我已经在拼写检查器组件中实现了建议排序规则

Most of the time collations work fine but in few case it fails.
工作:

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>
我尝试了
query:gone wthh thes wnd
:在这个wnd中,没有给出建议wind,但是排序即将=
命中率=117

不工作:

但是当我尝试
query:goverwhthes wint
:在这个例子中,wint确实给出了wind的建议,但是排序不正确的。而不是《飘》它给出了《飘》
hits=1

我还想知道排序中的点击次数是多少

配置:

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>
solrconfig.xml:
文字拼写
违约
格劳西
solr.DirectSolrSpellChecker
内部的
0.5
2.
0
5.
2.
0.9
频率
格劳西
违约
在…上
真的
25
真的
100000000
25
真的
50
50
真的
拼写检查
Schema.xml:

我得到了问题的答案。经过深入阅读,我发现了排序规则背后的逻辑

1)拼写检查。maxCollations:
它只是根据索引进行排序

2)spellcheck.maxCollations:
它评估在spellcheck.maxCollations时生成的排序规则。如果我们将
spellcheck.maxcollations
的值设置为低,那么它将提供更好的排序,而如果我们将
spellcheck.maxcollations
的值设置为高,那么它将提供更多的排序结果,但是会损害性能


因此,通过增加
拼写检查.maxcollations
的值,它将gone的排序赋予wintgone with the wint,但我要再次指出,这会损害性能。

我想做拼写/查询更正功能。我有49 GB的索引数据,我已经应用了拼写检查。我想和谷歌一样——“你的意思是什么?”。示例-如果任何用户键入任何可能拼写错误或键入错误的问题/查询。我需要给他们一些建议,比如“你的意思是什么?”。索尔最适合吗?