solrのサブクエリで()の中に-をつけると結果がゼロになる話
どうした
solrのfqに下記のような値を設定しても思ったような結果が返ってこない。
(-fieldNameA:A OR -fieldNameB:B) AND fieldNameC:C
下記のような値は大丈夫。
(-fieldNameA:A)
-fieldNameA:A OR -fieldNameB:B
参考URL
lucene-solr/the-standard-query-parser.adoc at e9393e88fd7586857da0d799bb8349865a42269c · apache/lucene-solr · GitHub
> Pure negative queries (all clauses prohibited) are allowed (only as a top-level clause)
Negative operator(NOT,- , !) in solr query string doesn't work with parentheses - Stack Overflow
原因と対応
pure negativeな書き方はtop-levelのみ対応らしい。
どうやら-やNOTはLuceneにわたすときに自動で*:*をつけてくれる(と書いてある・未確認)ようだが、()内はやってくれないみたい。
なので上の通り先頭に*:*(全件取得)をつけてこう書く。
(*:* -fieldNameA:A OR -fieldNameB:B) AND fieldNameC:C
あるいはこう
-(fieldNameA:A OR fieldNameB:B) AND fieldNameC:C
なんか…気持ち悪いな…これ同じなんだ…?