2016-09-20 11 views
0

私はWebアプリケーションを開発しており、Solrを検索エンジンとして使用しています。オートコンプリート機能を追加したいと思います。これを行うために、Suggesterコンポーネントを追加し、それに対して別のフィールドを設定しました。これは正常に動作します。Solr Suggesterからシングルワードを返す

問題は、Suggesterがフィールドの値全体を返すことです。たとえば、記事の名前が「ニュース価値のある商品」で、「新規」を検索すると、「ニュース価値の高い商品」全体が返されます。「ニュース価値の高い商品」を返すことができます。言い換えれば、個々の単語トークンを返します。

スキーマは次のようになります。

<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="term" type="text_autocomplete" indexed="true" stored="true" multiValued="false" /> 
<field name="weight" type="float" indexed="true" stored="true" /> 

<copyField source="name" dest="term"/> 

値は、「用語」フィールドにコピーされます。 The Solr config:

<!-- Search component --> 
<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
    <str name="name">suggester</str> 
    <str name="lookupImpl">AnalyzingLookupFactory</str> 
    <str name="dictionaryImpl">DocumentDictionaryFactory</str> 
    <str name="field">term</str> 
    <str name="weightField">weight</str> 
    <str name="suggestAnalyzerFieldType">text_autocomplete</str> 
    <str name="buildOnStartup">false</str> 
    </lst> 
</searchComponent> 

<!-- Search handler --> 
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
    <lst name="defaults"> 
    <str name="suggest">true</str> 
    <str name="suggest.count">10</str> 
    <str name="suggest.dictionary">suggester</str> 
    <str name="suggest.build">true</str> 
    </lst> 
    <arr name="components"> 
    <str>suggest</str> 
    </arr> 
</requestHandler> 

Suggesterが単一の単語を返すようにするスキーマおよび/または構成をお勧めする人はいますか?

答えて

1

solr.SuggestComponentの代わりにsolr.SpellCheckComponentを使用してみてください。 SuggestComponentは完全なフレーズを提案するためのものです。 ここでsolr.SpellCheckComponentの詳細を調べることができます。

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

あなたのクイックリファレンスのために、あなたはこれを試すことができます。

<searchComponent name="suggest" class="solr.SpellCheckComponent"> 
<lst name="spellchecker"> 
    <str name="name">suggest</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookupFactory</str> 
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str> 
    <str name="field">term</str> 
    <str name="accuracy">0.7</str> 
    <float name="thresholdTokenFrequency">.0001</float> 

</lst> 
</searchComponent> 
+0

これはすばらしい、ありがとう! – Knut

関連する問題