入力した検索語と完全に一致するようにSolr検索エンジンを構成したいと思います。
例えば。 「taxes」は、「tax」、「taxation」などではなく、「taxes」を含むドキュメントを返す必要があります。
ヘルプやヒントをいただければ幸いです。
あなたのフィールドはTextFieldだと思いますが、デフォルトではsolrはこのフィールドに対してあいまい検索を行います。必要なのは、フィールドを文字列フィールドとして設定し、トークナイザーを追加しないことです。そうすれば、完全に一致するようになります。
正確な検索とあいまい検索を組み合わせて、DisMaxを使用して相対的な重みを増やすこともできます。
例(schema.xml):
<field name="name" type="string" indexed="true" stored="false" required="true" />
<field name="nameString" type="string" indexed="true" stored="false" required="true" />
<copyField source="name" dest="nameString"/>
例(solrconfig.xml):
<requestHandler name="accounts" class="solr.SearchHandler">
<lst name="defaults">
<str name="defType">dismax</str>
<str name="qf">
nameString^10.0 name^5.0 description^1.0
</str>
<str name="tie">0.1</str>
</lst>
</requestHandler>
オフ ステミング 。
Schema.xmlでステミングをオフにするには、次のようにテキストフィールドを定義できます。
<types>
<!-- other fields definition -->
<fieldType name="text_no_stem" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- other fields definition -->
</types>
<fields>
<!-- other fields definition -->
<dynamicField name="*_nostem" type="text_no_stem" indexed="true" stored="true"/>
<!-- other fields definition -->
</fields>
sunspot を使用してsolrをRailsのRubyと統合します。これをschema.xmlで使用して、検索可能なブロックを次のように定義します。
searchable do
text(:wants, as: :wants_nostem)
end
完全一致の結果には引用符を使用します。
例:
コア名:core1キー:namestring
http:// localhost:8983/solr/core1/select?q = namestring : "taxes"&wt = json&indent = true
正確な値の検索を行うsolr文字列フィールドを使用します。
<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />