Solr/Lucene do not employ boolean logic. See Hossman’s excellent post: https://lucidworks.com/post/why-not-and-or-and-not/
Until you internalize this rather subtle difference, you’ll be surprised. A lot ;). You can make query parsing look a lot like boolean logic by carefully using parentheses… Best, Erick > On Apr 8, 2020, at 6:38 AM, Bernd Fehling <bernd.fehl...@uni-bielefeld.de> > wrote: > > About first query, you have a negative query telling the searcher to give only > results _NOT_ containing "name_s:a". From that result list you want only > results of "age_i:10". > Boolean table for OR is: > 0 OR 0 = 0 > 1 OR 0 = 1 > 0 OR 1 = 1 > 1 OR 1 = 1 > You get one result. > > About second query your "parsedquery" says you _must_ have id:1 OR id:2 > (where you will get both) but _must_ _not_ have anything with "name_s:a". > But you have something with "name_s:a", so you get no results. > > Regards > Bernd > > Am 08.04.20 um 11:53 schrieb slly: >> My default query operator is OR.There are two pieces of data in the index: >> { "id":"1", "name_s":"a", "age_i":10, "_version_":1663396766955864064}, { >> "id":"2", "name_s":"b", "age_i":10, "_version_":1663396767058624512}] } >> >> >> 1. -name_s:a OR age_i:10 # I think two pieces of data should be >> returned, but only one >> >> "rawquerystring":"-name_s:a age_i:10", "querystring":"-name_s:a age_i:10", >> "parsedquery":"-name_s:a IndexOrDocValuesQuery(age_i:[10 TO 10])", >> "parsedquery_toString":"-name_s:a age_i:[10 TO 10]", >> "QParser":"LuceneQParser", >> >> >> >> 2. id:("1" "2") AND (-name_s:a) # I think one data should be returned, but >> 0 data >> >> "rawquerystring":"id:(\"1\" \"2\") AND (-name_s:a)", >> "querystring":"id:(\"1\" \"2\") AND (-name_s:a)", "parsedquery":"+(id:1 >> id:2) +(-name_s:a)", "parsedquery_toString":"+(id:1 id:2) +(-name_s:a)", >> "QParser":"LuceneQParser", >> >> >> >> >> >> At 2020-04-08 17:46:37, "Bernd Fehling" <bernd.fehl...@uni-bielefeld.de> >> wrote: >>> What is debugQuery telling you about: >>> - "rawquerystring" >>> - "querystring" >>> - "parsedquery" >>> - "parsedquery_toString" >>> - "QParser" >>> >>> Also what is your default query operator, AND or OR? >>> This is what matters for your second example with id:("1" "2") >>> It could be id:("1" AND "2") or id:("1" OR "2") . >>> >>> Regards >>> Bernd >>> >>> Am 08.04.20 um 11:30 schrieb slly: >>>> Thanks Bernd for your reply. >>>> I run the query on the Solr Web UI in Solr 7.3.1/7.7.2, the screenshot of >>>> my execution results is as follows, I don't understand whether there is a >>>> grammatical error ? >>>> 1. -name_s:a OR age_i:10 >>>> >>>> 2. id:("1" "2") AND (-name_s:a) >>>> >>>> >>>> At 2020-04-08 16:33:20, "Bernd Fehling" <bernd.fehl...@uni-bielefeld.de> >>>> wrote: >>>>> Looks correct to me. >>>>> >>>>> You have to obey the level of the operators and the parenthesis. >>>>> Turn debugQuery on to see the results of parsing of your query. >>>>> >>>>> Regards >>>>> Bernd >>>>> >>>>> Am 08.04.20 um 09:34 schrieb slly: >>>>>> >>>>>> >>>>>> If the following query is executed, the result is different: >>>>>> >>>>>> >>>>>> id:("1" "2") AND (-name_s:a) --> numFound is 0 >>>>>> >>>>>> >>>>>> id:("1" "2") AND -(name_s:a) --> numFound is 1 >>>>>> >>>>>> >>>>>> >>>>>> At 2020-04-08 14:56:26, "slly" <sll...@126.com> wrote: >>>>>>> Hello Folks, >>>>>>> We are using Solr 7.3.1, I write the following two lines of data into >>>>>>> collection: >>>>>>> id, name_s, age_i >>>>>>> 1, a, 10 >>>>>>> 2, b, 10 >>>>>>> Use the following query syntax: >>>>>>> -name_s:a OR age_i:10 >>>>>>> >>>>>>> >>>>>>> I think we should return two pieces of data, but actually only one >>>>>>> piece of data: >>>>>>> id, name_s, age_i >>>>>>> 2, b, 10 >>>>>>> >>>>>>> >>>>>>> Did I get it wrong? Looking forward to some valuable suggestions. >>>>>>> Thanks. >>>>