簡體   English   中英

拼寫檢查Solr:solr.DirectSolrSpellChecker配置

[英]Spellcheck Solr: solr.DirectSolrSpellChecker config

我正在嘗試使用solr.DirectSolrSpellChecker(無需在其中構建專用索引)使用Solr 4.7.2測試拼寫檢查功能。

我的索引中有一個名為“ title”的字段; 我使用復制字段定義創建了一個名為“ title_spell”的字段,以進行拼寫檢查(title_spell已正確填充)。 但是,在admin solr管理控制台中,我總是得到空的建議。

例如:我有一個solr文檔,標題為“ AB automotive”; 我在管理控制台(划線檢查並在輸入字段spellcheck.q下)中輸入“ atuomobile”。 我希望至少能得到“ AB汽車”或“汽車”之類的東西,但拼寫檢查建議仍然為空。

我的配置:

schema.xml(僅復制了相關部分):

    <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StandardFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="de_DE/synonyms.txt" ignoreCase="true"
                    expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StandardFilterFactory"/>
        </analyzer>
    </fieldType>
    ...
    <field name="title_spell" type="textSpell" indexed="true" stored="true" multiValued="false"/>

solr.xml(僅復制相關部分):

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">textSpell</str>
    <lst name="spellchecker">
        <str name="name">default</str>
        <str name="field">title_spell</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">1</int>
        <int name="maxInspections">5</int>
        <int name="minQueryLength">4</int>
        <float name="maxQueryFrequency">0.01</float>
        <float name="thresholdTokenFrequency">.01</float>
    </lst>
</searchComponent>
...
<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <lst name="defaults">
        <str name="defType">edismax</str>
        <str name="echoParams">explicit</str>
    </lst>
    <!--Versuch, das online datum mit in die Gewichtung zu nehmen...-->
    <lst name="appends">
        <str name="bf">recip(ms(NOW/MONTH,sort_date___d_i_s),3.16e-11,50,1)</str>
        <!--<str name="qf">title___td_i_s_gcopy^1e-11</str>-->
        <str name="qf">title___td_i_s_gcopy^21</str>
        <str name="q.op">AND</str>
    </lst>


    <arr name="last-components">
        <str>spellcheck</str>
    </arr>
</requestHandler>

我錯過了什么? 感謝您的回答!

您的索引有多大? 對於小的索引(認為少於幾百萬個文檔),您將不得不調整accuracymaxQueryFrequencythresholdTokenFrequency (實際上,在較大的索引上也應該這樣做。)

例如,我的150萬文檔索引將以下設置用於這些設置:

      <float name="maxQueryFrequency">0.01</float>
      <float name="thresholdTokenFrequency">.00001</float>
      <float name="accuracy">0.5</float>

accuracy告訴Solr,在認為值得作為建議返回之前,結果需要多精確。

maxQueryFrequency告訴Solr該術語在索引中需要出現的頻率,然后才可以認為值得將該術語作為建議返回。

thresholdTokenFrequency告訴Solr在認為該術語值得建議之前,必須包含該術語的文檔的百分比。

如果您打算對多個詞組使用拼寫檢查,則可能需要將ShingleFilter添加到title_spell字段。

您可能要嘗試的另一件事是將queryAnalyzerFieldType設置為title_spell

您可以嘗試編輯requestHandler聲明嗎?

<requestHandler name="/standard" class="solr.SearchHandler" default="true">

並將網址查詢為:

http://localhost:8080/solr/service/standard?q=<term>&qf=title_spell

首先用小術語進行實驗,並了解其行為方式。 這里的一個問題是,它將僅返回以相同query term開頭的所有query term 您可以使用FuzzyLookupFactory來匹配並返回模糊結果。 有關更多信息,請查看Solr建議者Wiki

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM