solr - 原始频率与 SOLR 中的建议频率不匹配

标签 solr

"whs is" - (73) 的输出是"who is" 与其实际原始频率不同的建议 <强>(94)
附上输出的两张图片供您引用


  • /spell?spellcheck.q="who is" 的输出

enter image description here


  • /spell?spellcheck.q="whs is" 的输出
    enter image description here

任何使两者频率相同的方法

Schema.xml 看起来像这样

<field name="gram" type="textSpell" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="gram_ci" type="textSpellCi" indexed="true" stored="false" multiValued="false"/>

<copyField source="gram" dest="gram_ci"/>

<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ShingleFilterFactory" maxShingleSize="5" minShingleSize="2" outputUnigrams="true"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ShingleFilterFactory" maxShingleSize="5" minShingleSize="2" outputUnigrams="true"/>
    </analyzer>
</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 看起来像这样

<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.99</float>
        <str name="comparatorClass">freq</str>
        <float name="thresholdTokenFrequency">0.0</float>
    </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">15</str>
        <str name="spellcheck.alternativeTermCount">10</str>
        <str name="spellcheck.onlyMorePopular">false</str>
    </lst>
    <arr name="last-components">
        <str>spellcheck</str>
    </arr>
</requestHandler>

最佳答案

我认为这些频率不是同一索引中术语的频率:

  • 对于/spell?spellcheck.q="who is"--> "whs is" 的频率是该词条在拼写检查器索引中的频率。 p>

  • for/spell?spellcheck.q="whs is"--> "whs is" 的频率是该术语在一般 Lucene 索引中的频率。

要获得相同的频率,您必须在搜索组件中使用 solr.DirectSolrSpellChecker 而不是 solr.IndexBasedSpellChecker(我猜):

http://wiki.apache.org/solr/DirectSolrSpellChecker

编辑:取决于您用来索引数据的方式。

关于solr - 原始频率与 SOLR 中的建议频率不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857915/

相关文章:

solr - 在 DataStax Enterprise 中将 PreparedStatement 与 solr_query 结合使用

solr - Solr 中的计数

java - Shingle filter factory startOffset 必须是非负数,endOffset 必须 >= startOffset

autocomplete - Solr仅对Suggester组件返回一个排序规则

indexing - Solr中 "multiValued"字段类型有什么用?

ruby-on-rails - 未定义的方法 "results"与 Sunspot Solr Search

lucene - 部分词的文档搜索

hadoop - Solr集合不会更新相同的hbase批处理批处理索引器时更新同一rowid上一个字段的值

java - solr 4.0如何加入子文档

Solr - 将分析器的结果写入不同的字段