0

元のクエリ (プログラムで生成された) の OR (左から 2 番目) が解析されたクエリで MUST になる理由を誰かが説明できますか? どうすればこれを防ぐことができますか?

Original Query: +matchAllDocs:true +( request_id:(00000000000000000000000000002796 OR 00000000000000000000000000002829) OR ( matchAllDocs:true AND ( request_id:(00000000000000000000000000002796) AND status_id:(1)) OR ( request_id:(00000000000000000000000000002829) AND status_id:(2))) AND (alltext:(internal) OR subject:(internal )^1.5))

Parsed Query: +matchAllDocs:true +((request_id:00000000000000000000000000002796 request_id:00000000000000000000000000002829) +(+matchAllDocs:true +(+request_id:00000000000000000000000000002796 +status_id:1) (+request_id:00000000000000000000000000002829 +status_id:2)) +(alltext:intern subject:intern^1.5))

ありがとう

4

1 に答える 1

0

AND は OR (演算の順序) よりも優れているため:

(something) OR //left will be SHOULD
(
    matchAllDocs:true AND 
    (
        request_id:(00000000000000000000000000002796) AND status_id:(1)
    ) OR 
    (
         request_id:(00000000000000000000000000002829) AND status_id:(2)
    )
) **AND** // left will be MUST
(alltext:(internal) OR subject:(internal )^1.5)

解決策は、次のように、より多くの括弧を使用することです。

+matchAllDocs:true +((request_id:(00000000000000000000000000002796 OR 00000000000000000000000000002829) OR ( matchAllDocs:true AND ( request_id:(00000000000000000000000000002796) AND status_id:(1)) OR ( request_id:(00000000000000000000000000002829) AND status_id:(2)))) AND (alltext:(internal) OR subject:(internal )^1.5))
于 2012-06-20T11:23:47.113 に答える