2

次の要件で Solr にクエリを実行しようとしています: _ 特定のフィールドを持たないすべてのドキュメントを取得したい

-排他性:[* TO *]

  • このフィールドを持ち、特定の値を取得したすべてのドキュメントを取得したい

独占権:(なし)

だから私がSolr 4をクエリしようとしているとき:

fq=(-排他性:[* TO *]) または排他性:(なし)

フィールドがドキュメントに存在し、値が None の場合にのみ結果を取得しましたが、結果には最初のクエリの結果が含まれていません!!

なぜ機能しないのか理解できません

4

2 に答える 2

1

結果を説明すると、取得する結果を指定していないため、クエリ(-exclusivity:[* TO *])は常に結果を取得しません。デフォルトでは、取得するように指示しない限り、Lucene は結果を取得しません。 exclusivity:(None)完全な結果セットに課される制限ではなく、取得するドキュメントを見つけるために使用されるキーです。これは、デフォルトでテーブル内のすべてのレコードを返し、セットを制限できるデータベースとは異なります。

(-exclusivity:[* TO *])何を取得しないかを指定するだけで、何も取得するように指示しません。

Solr は純粋なネガティブ クエリを処理するロジックを持っています (以下とほぼ同じ方法で、最初にすべてのドキュメントを暗黙的に取得することであると思います) term1 OR -term2 .

solr では、クエリ*:*を使用してすべてのドキュメントを取得できるはずです (生の lucene では利用できませんが)。したがって、次のクエリを使用できます。

(*:* -exclusivity:[* TO *]) exclusivity:(None)

つまり、get (排他性に値があるものを除くすべてのドキュメント) または排他性 = "なし" のドキュメント

于 2013-01-24T16:31:10.880 に答える
0

私はこの問題に対する答えを見つけました。「-」がsolrでどのように機能するかを誤って仮定しました.I

-排他性:[* TO *]

排他フィールドのないすべてのものをデータセットに追加しますが、そうではありません。「-」は、データセットから除外することしかできません。ところで femtoRgon あなたは正しいですが、私はそれを言及するのを忘れていたマスタークエリとしてではなく、fq (フィルタークエリ) として使用しています。

したがって、解決策は次のようになります

-排他性:([* TO *] AND -(なし))

完全なクエリは次のようになります

/?q=*:*&fq=-排他性:([* TO *] AND -(なし))

つまり、すべてにフィールドの排他性がないか、このフィールドがあり、値なしが入力されていることを意味します。

于 2013-01-24T20:02:01.610 に答える