2012-05-08 3 views
0

schema.xmlnameというテキストフィールドがあります。次の書類を返すq=name:(organic)クエリ:だけのため「有機」Solrクエリは、フィールド内のすべての単語/トークンと一致する必要があります

<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の検索、で完全に右であるしかしは、私はそれが何も返さないようにクエリを作成したいと思いますフィールドで利用可能な2つの単語のうちの1つに一致します。

これは良いことでしょう:フィールド内のすべてのトークンが一致する場合のみ結果を返します。したがって、フィールドに2つの単語(トークン)があり、1('有機''有機物''オルガン'など)と一致する場合、フィールドが検索されました。

これはSolrでも可能ですか?どのようにクエリを構築しますか?

答えて

0

時間の制約から、私は次の(ハッキーな)解決策に頼らざるを得ませんでした。

tc_iという名前のDynamicFieldフィールドを使用して、用語カウントをインデックスに追加しました。

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

今問合せ時に私は、用語をカウントし、クエリに追加し、そうq=name:(organic)q=name:(organic) AND tc_i:(1)になり、そのtc_iフィールドが設定されているので、これは明らかに「有機店」/「オーガニック製品」のための書類を返しません2時(2ワード)。

+0

多値フィールドでは機能しません。 – yura

0

StandardTokenizerFactory(またはそれに類するもの)を使用している可能性がありますが、KeywordTokenizerFactoryを使用してフレーズクエリを発行して完全一致するだけです。もちろん、(LowerCaseFilterFactoryなどの)使用したいかもしれない他のフィルタを覚えておいてください。 「店舗オーガニック」はあなたのドキュメントにも一致しません。

+0

こんにちはraticulin、私はKeywordTokenizerFactoryを使用していただろうが、私はフィールドでlemmatizationが必要です。例えば。 "オーガニックストア"は "オーガニックストア"などに当たってください。 –