solr自動補完

20016 ワード

solr自動補完:
http://www.cnblogs.com/ibook360/archive/2011/11/30/2269077.html
 
Solrの自動完了/自動補完実装の紹介(第1部)ではfacetingのメカニズムで自動完了(autocomplete)を実現する機能について紹介したが、今日はSuggesterのコンポーネントで自動完了機能を実現する方法について見てみる.開始solr 自动补全ここで注意が必要です.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>  


 
最後の次のセクションでは、静的な辞書情報を使用するために構成を変更する方法と、より良いアドバイスを得る方法について説明します.このシリーズの最後の部分では、これらの方法のパフォーマンスを比較し、異なるシーンで最も速いものを選択します.