solr自動補完
20016 ワード
solr自動補完:
http://www.cnblogs.com/ibook360/archive/2011/11/30/2269077.html
Solrの自動完了/自動補完実装の紹介(第1部)ではfacetingのメカニズムで自動完了(autocomplete)を実現する機能について紹介したが、今日はSuggesterのコンポーネントで自動完了機能を実現する方法について見てみる.開始ここで注意が必要です.Suggestコンポーネントは1.4.1以降では使用できません.このコンポーネントを使用するには、3_をダウンロードする必要があります.xまたはlucene/solrのメインバージョン.インデックス構成の前にsearchComponentを定義します.
このコンポーネントはsolrに基づいていますSpellCheckComponentは、いくつかの構成を使用することができます.構成には3つの重要な属性があります.
name:コンポーネント名lookupImpl:この検索のオブジェクトをバインドします.現在、JasperLookup、TSTLookupの2つのクラスが使用できます.2番目の効率が高いfield:適切なhandlerを追加します.
非常に簡単な構成で、Searchのコンポーネントを定義し、solrが提案するたびに最大個数が10であることを示し、上記のsuggestコンポーネントを使用します.インデックスは、id、name、descriptionの3つのフィールドがあると仮定します.nameフィールドの自動完了機能を使用したい場合、インデックス構成は次のとおりです.
さらに、copyFiledを定義する必要があります.
単語推奨単独語の推奨を完了するにはtextを定義する必要があります.Autocompleteのタイプ:
フレーズ推奨完全なフレーズ推奨を実現すればtext_Autocompleteタイプは次のように定義します.
フレーズを使用する場合は、自分の変換クラス(キッチン、iKなどの中国語)を定義して辞書を作成する必要があります.このコンポーネントを使用する前に、solrコマンドを使用してインデックスを作成する必要があります.
クエリーはやっとこのコンポーネントを使用できます.フレーズの推奨方法を使用して、クエリ文を次のように仮定します.
この文を実行すると、次の推奨事項が表示されます.
最後の次のセクションでは、静的な辞書情報を使用するために構成を変更する方法と、より良いアドバイスを得る方法について説明します.このシリーズの最後の部分では、これらの方法のパフォーマンスを比較し、異なるシーンで最も速いものを選択します.
http://www.cnblogs.com/ibook360/archive/2011/11/30/2269077.html
Solrの自動完了/自動補完実装の紹介(第1部)ではfacetingのメカニズムで自動完了(autocomplete)を実現する機能について紹介したが、今日はSuggesterのコンポーネントで自動完了機能を実現する方法について見てみる.開始ここで注意が必要です.Suggestコンポーネントは1.4.1以降では使用できません.このコンポーネントを使用するには、3_をダウンロードする必要があります.xまたはlucene/solrのメインバージョン.インデックス構成の前にsearchComponentを定義します.
<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.tst.TSTLookup</str>
<str name="field">name_autocomplete</str>
</lst>
</searchComponent>
このコンポーネントはsolrに基づいていますSpellCheckComponentは、いくつかの構成を使用することができます.構成には3つの重要な属性があります.
name:コンポーネント名lookupImpl:この検索のオブジェクトをバインドします.現在、JasperLookup、TSTLookupの2つのクラスが使用できます.2番目の効率が高いfield:適切なhandlerを追加します.
<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
非常に簡単な構成で、Searchのコンポーネントを定義し、solrが提案するたびに最大個数が10であることを示し、上記のsuggestコンポーネントを使用します.インデックスは、id、name、descriptionの3つのフィールドがあると仮定します.nameフィールドの自動完了機能を使用したい場合、インデックス構成は次のとおりです.
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="name" type="text" indexed="true" stored="true" multiValued="false" />
<field name="name_autocomplete" type="text_auto" indexed="true" stored="true" multiValued="false" />
<field name="description" type="text" indexed="true" stored="true" multiValued="false" />
さらに、copyFiledを定義する必要があります.
<copyField source="name" dest="name_autocomplete" />
単語推奨単独語の推奨を完了するにはtextを定義する必要があります.Autocompleteのタイプ:
<fieldType class="solr.TextField" name="text_auto" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
フレーズ推奨完全なフレーズ推奨を実現すればtext_Autocompleteタイプは次のように定義します.
<fieldType class="solr.TextField" name="text_auto">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
フレーズを使用する場合は、自分の変換クラス(キッチン、iKなどの中国語)を定義して辞書を作成する必要があります.このコンポーネントを使用する前に、solrコマンドを使用してインデックスを作成する必要があります.
/suggest?spellcheck.build=true
クエリーはやっとこのコンポーネントを使用できます.フレーズの推奨方法を使用して、クエリ文を次のように仮定します.
/suggest?q=har
この文を実行すると、次の推奨事項が表示されます.
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
<lst name="spellcheck">
<lst name="suggestions">
<lst name="dys">
<int name="numFound">4</int>
<int name="startOffset">0</int>
<int name="endOffset">3</int>
<arr name="suggestion">
<str>hard drive</str>
<str>hard drive samsung</str>
<str>hard drive seagate</str>
<str>hard drive toshiba</str>
</arr>
</lst>
</lst>
</lst>
</response>
最後の次のセクションでは、静的な辞書情報を使用するために構成を変更する方法と、より良いアドバイスを得る方法について説明します.このシリーズの最後の部分では、これらの方法のパフォーマンスを比較し、異なるシーンで最も速いものを選択します.