0

Dismaxクエリパーサーを使用してsolr 4.5でインデックス付きデータからフリーテキスト検索結果を取得しようとしていますが、次のような単純なクエリでは結果が返されず、エラーもありません。

http://localhost:9999/solr/products/select?q=cuir&qf=text_fr&defType=dismax

そして、これらのドキュメントはインデックスに存在します:

{ id: 1, label: "Sac à main en cuir" }
{ id: 2, label: "Sac à main en cuir rouge" }

私のschema.xmlは次のとおりです。

..
<field name="id" type="int" indexed="true" stored="true" required="true" /> 
<field name="label" type="string" indexed="true" stored="true" required="true" />
...
<copyField source="label" dest="label_fr"/>
<dynamicField name="*_fr" type="text_fr" indexed="true" stored="false" />
...
<fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
  <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_french.txt" enablePositionIncrements="true" />
    <filter class="solr.SnowballPorterFilterFactory" language="French"/>
    <filter class="solr.CollationKeyFilterFactory" language="fr" strength="primary" />
  </analyzer>
</fieldType>

およびsolrconfig.xmlで

...
<requestHandler name="/select" class="solr.SearchHandler">
  <lst name="defaults">
    <str name="echoParams">explicit</str>
    <int name="rows">10</int>
    <str name="defType">dismax</str>
  </lst>
 ...

何が間違っているのでしょうか?なぜ結果が出ないのですか?

4

2 に答える 2

2

KeywordTokenizer はインデックス文字列全体を単一のトークンとして扱うため、単一の単語クエリには一致しません。

代わりに、StandardTokenizerFactory、WhitespaceTokenizerFactory、または WordDelimiterFilter を試すことができます。

于 2013-11-03T00:27:42.670 に答える
0

上記のスキーマでは、フィールド「ラベル」を「文字列」として定義し、それを単一の文字列として扱っています

fieldType を次のように変更する必要があります。

<field name="label" type="text_general" indexed="true" stored="true" required="true" />

上記のように、デフォルトで text_general fieldType には StandardTokenizerFactory が構成されています。

フィールドをテキスト (または文字列) として扱い、全文検索を実行できます。

注 : FieldType String は、特定のカテゴリのファセット検索の場合に適しています。その場合、より良い結果を得るには String を使用する必要があります。または、CopyField を実行できます。

于 2016-05-11T04:55:32.917 に答える