次の構成で solr 提案コンポーネントを使用しています。
schema.xml
<fieldType name="textSpell" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="image_memo" type="text_general"/>
<field name="username" type="text_general"/>
<field name="image_memo" type="text_general"/>
<field name="image_text" type="text_general"/>
<!-- More fields included here -->
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="spell"/>
solrconfig.xml
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<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">spell</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler"
name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">6</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.maxCollations">6</str>
<str name="spellcheck.maxCollationTries">1000</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.collateParam.mm">100%</str>
</lst>
<arr name="components">
<str>suggest</str>
<str>query</str>
</arr>
</requestHandler>
ご覧のとおりspell
、提案クエリに使用しているフィールドがあります。これは、複数の用語クエリでもうまく機能します。
しかし、私が必要とするのは、選択したフィールドのみを検索することです。
たとえば、フィールドに対してのみ有効な提案が必要でimage_memo
ありusername
、ユーザーは検索するフィールドを動的に追加および削除できます。
私はこのようなことができることを知っています:
q=(image_memo:*search* OR image_username:*search*)
しかし、多くのフィールドと複数の用語のクエリがある場合、これは劇的に遅くなります。
例: フィールドmemo, username, field, field1 and field2
での検索term, term1 and term2.
((memo: term OR username: term OR field: term OR field1: term OR field2: term ) AND (memo: term1 OR username: term1 OR field: term1 OR field1: term1 OR field2: term1 ) AND (memo: term2 ORユーザー名: term2 OR フィールド: term2 OR フィールド1 : term2 OR フィールド2 : term2 ))
フィールドを動的に選択する方法はありますかspell
。または、多値フィールドでのみ特定のフィールドを検索できる方法はありますか
Apache Solr 4 Alpha を使用しています。