web-dev-qa-db-ja.com

Solrの正確な単語検索

入力した検索語と完全に一致するようにSolr検索エンジンを構成したいと思います。

例えば。 「taxes」は、「tax」、「taxation」などではなく、「taxes」を含むドキュメントを返す必要があります。

ヘルプやヒントをいただければ幸いです。

19
Ruth

あなたのフィールドは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>
21
developresource

オフ ステミング

4
Hank Gay

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
3
wawka

完全一致の結果には引用符を使用します。

例:

コア名:core1キー:namestring

http:// localhost:8983/solr/core1/select?q = namestring : "taxes"&wt = json&indent = true

2
Priya M

正確な値の検索を行うsolr文字列フィールドを使用します。

<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />
1
Vijay Tiwary