Googleのような自動補完方法の1つは、シングルとソルバー1.4のタームベクトルコンポーネントを組み合わせることです。シングルとタームベクトルコンポーネントによるオートコンプリート
まず、帯状疱疹成分を含むすべてのnグラム分布を生成し、次にtermvectorを使用して、ユーザーの用語シーケンス(文書の頻度に基づく)に最も近い予測を得る。
スキーマ:
<fieldType name="shingle_text_fivegram" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
<filter class="solr.ShingleFilterFactory" maxShingleSize="5" outputUnigrams="false"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
のSolrの設定:
<searchcomponent name="termsComponent" class="org.apache.solr.handler.component.TermsComponent"/>
<requesthandler name="/terms" class="org.apache.solr.handler.component.SearchHandler">
<lst name="defaults">
<bool name="terms">true</bool>
<str name="terms.fl">shingleContent_fivegram</str>
</lst>
<arr name="components">
<str>termsComponent</str>
</arr>
</requesthandler>
Iはnグラムのエッジ上の任意の場所にストップワードドロップすると、n個の内部でそれらを維持する必要があります上記のセットアップで-gram配列。
のシーケンス「インドと中国」から言ってみましょう私は、次の手順が必要です。
india
china
india and china
をし、残りの部分をスキップしてください。
他のSolrコンポーネント/フィルタと組み合わせて使用できますか?
UPD:
「あなただけの開始(最初のトークンでストップワードを削除するカスタムストップフィルタを作ることができませんでした(:ここでのLucene 4での一つの可能な解決策(SOLRに配線することが可能なはずであるが)であります(キャプチャ/ restorteState)が必要でしたが、実行可能なように見えますか? " - からマイケル・マッカンドレス
:あなたは彼/彼女のタイプのそれのようにユーザーの入力を一致させる必要があるとして、http://blog.mikemccandless.com/2013/08/suggeststopfilter-carefully-removes.html
質問は、マルチワードのオートコンプリート実装する方法ではありません。これは既に行われています。問題は、検索時に、生成されたnグラムの端にストップワードを落とす方法です。 –