2

Solr 5.3.0 を使用してオートコンプリート機能を実装しようとしています

solrconfig.xml は次のようになります

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">default</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">suggest_ngram</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">text_suggest_ngram</str>
    <str name="buildOnStartup">true</str>
  </lst>
</searchComponent>

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
<lst name="defaults">
  <str name="suggest">true</str>
  <str name="suggest.count">10</str>
</lst>
<arr name="components">
  <str>suggest</str>
</arr>

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

<fieldType name="text_suggest_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.EdgeNGramFilterFactory" maxGramSize="10" minGramSize="2" />
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>


<field name="suggest_ngram" type="text_suggest_ngram" indexed="true" stored="false"/>
<field name="name" type="string" multiValued="false" indexed="true" stored="true"/>
<field name="price" type="tlong" multiValued="false" indexed="true" stored="true"/>
<copyField source="name" dest="suggest_ngram"/>

Solr の管理パネルからアナライザーを使用すると、インデックス付きの ngram が表示されます。そして、一致を指摘することに成功します。

ただし、クエリを使用すると:

http://localhost:8983/solr/products/suggest?suggest=true&suggest.build=true&wt=json&suggest.q=Jind

0 件の提案がありました。レスポンスはこちら: https://api.myjson.com/bins/47r3i

いずれかのドキュメントの名前キーに「Jindal Panther」という値が存在します。

さらに、タイプが「String」、ソースが「name」のダミーのコピーフィールド「suggest」を作成すると、「name」で正常に機能する提案が「suggest」では機能しないことがわかりました。これは、提案を有効にするための copyfield の構成ミスでしょうか?

どんな助けでも大歓迎です。前もって感謝します。

編集:解決策を得ました。以下の受け入れられた回答とそのコメントを参照してください。サジェスターズについて見事に説明しているブログに出会いました。Solr Search の初心者にとっては、一読の価値があります。

https://lucidworks.com/blog/2015/03/04/solr-suggester/

4

1 に答える 1

4

サジェスタを設定するフィールドはstore=true. 索引付けする必要はありません。Suggester 構成は、 の提供構成に従ってディクショナリを構築しますsuggestComponetnameフィールドは、そうではない場所として保存されていますtruesuggest_ngram次のようにスキーマ構成を更新する必要があります。

<field name="suggest_ngram" type="text_suggest_ngram" indexed="false" stored="true"/>

suggest.dictionaryまた、提案に使用している辞書であるパラメーターを提供する必要があります。あなたにとって、それは としての名前defaultです。

http://localhost:8983/solr/products/suggest?suggest=true&
       suggest.build=true&
       wt=json&
       suggest.dictionary=default&
       suggest.q=Jind

requestHandlerまたは、 of で辞書構成を提供できます/suggest

<str name="suggest.dictionary">default</str>
于 2015-09-30T09:50:45.440 に答える