0

にというテキストフィールドがありnameますschema.xml。クエリq=name:(organic)は次のドキュメントを返します。

<doc>
    <str name="id">ontology.category.1483</str>
    <str name="name">Organic Products</str>
</doc>
<doc>
    <str name="id">ontology.keyword.4896</str>
    <str name="name">Organic Stores</str>
</doc> 

これは通常のSolr検索では完全に正しいですが、organic」はフィールドで使用可能な2つの単語のうちの1つにしか一致しないため、何も返されないようにクエリを作成したいと思います。

これを言うより良い方法は次のとおりです。フィールド内のすべてのトークンが一致した場合にのみ結果を返します。したがって、フィールドに2つの単語(トークン)があり、1つしか一致しない場合(「organic」「organics」「organ」など)、フィールドの50%しか検索されていないため、一致するはずがありません。 。

これはSolrで可能ですか?クエリを作成するにはどうすればよいですか?

4

2 に答える 2

0

おそらくStandardTokenizerFactory(または同様のもの)を使用しています。1つの解決策は、KeywordTokenizerFactoryを使用してフレーズクエリを発行することです。そうすると、完全一致のみが機能します。もちろん、使用する可能性のある他のフィルター(LowerCaseFilterFactoryなど)を覚えておいてください。注:「オーガニックストア」はドキュメントとも一致しません

于 2012-05-09T08:47:06.887 に答える
0

時間の制約のため、私は次の(ハッキーな)解決策に頼らなければなりませんでした。

と呼ばれるDynamicFieldフィールドを介して、用語カウントをインデックスに追加しましたtc_i

<dynamicField name="*_i" type="int" indexed="true" stored="true"/>

クエリ時に用語を数えてクエリに追加すると、フィールドが2(2ワード)に設定されているため、明らかに「オーガニックストア」/「オーガニック商品」のドキュメントは返されませんq=name:(organic)q=name:(organic) AND tc_i:(1)tc_i

于 2012-05-09T22:23:59.413 に答える