"whs is" - (73) 的输出是"who is" 与其实际原始频率不同的建议 <强>(94)强>
附上输出的两张图片供您引用
/spell?spellcheck.q="who is"
的输出
/spell?spellcheck.q="whs is"
的输出
任何使两者频率相同的方法
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/