You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by slly <sl...@126.com> on 2020/04/08 06:56:26 UTC

Use boolean operator "-", the result is incorrect

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.

Re:Use boolean operator "-", the result is incorrect

Posted by slly <sl...@126.com>.





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" <sl...@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.

Re:Re: Use boolean operator "-", the result is incorrect

Posted by slly <sl...@126.com>.


Thanks Bernd for your reply. 
Can you tell me what your query syntax looks like?







At 2020-04-08 16:33:20, "Bernd Fehling" <be...@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" <sl...@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.

Re:Re: Use boolean operator "-", the result is incorrect

Posted by slly <sl...@126.com>.
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" <be...@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" <sl...@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.



 





 

Re:Re: Use boolean operator "-", the result is incorrect

Posted by slly <sl...@126.com>.
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" <be...@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" <be...@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" <sl...@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.
>> 

Re:Re: Use boolean operator "-", the result is incorrect

Posted by slly <sl...@126.com>.


Thank you very much for your reply. I have understood the meaning of it.  


https://lucidworks.com/post/why-not-and-or-and-not/    



At 2020-04-09 01:45:14, "Chris Hostetter" <ho...@fucit.org> wrote:
>: 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…
>
>Yup.  and to circle back to the original request...
>
>: >>>>>>> id, name_s, age_i
>: >>>>>>> 1, a, 10
>: >>>>>>> 2, b, 10
>: >>>>>>> Use the following query syntax:
>: >>>>>>> -name_s:a OR age_i:10
>
>tht says "Find all docs where age==10, then exclude docs where name==a
>
>If what you want is "all docs where name!=a, combined with all docs where 
>age==10" that would be...
>
>	(*:* -name_s:a) age_i:10
>
>
>-Hoss
>http://www.lucidworks.com/

Re: Use boolean operator "-", the result is incorrect

Posted by Chris Hostetter <ho...@fucit.org>.
: 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…

Yup.  and to circle back to the original request...

: >>>>>>> id, name_s, age_i
: >>>>>>> 1, a, 10
: >>>>>>> 2, b, 10
: >>>>>>> Use the following query syntax:
: >>>>>>> -name_s:a OR age_i:10

tht says "Find all docs where age==10, then exclude docs where name==a

If what you want is "all docs where name!=a, combined with all docs where 
age==10" that would be...

	(*:* -name_s:a) age_i:10


-Hoss
http://www.lucidworks.com/

Re: Use boolean operator "-", the result is incorrect

Posted by Erick Erickson <er...@gmail.com>.
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 <be...@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" <be...@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" <be...@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" <sl...@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.
>>>> 


Re: Use boolean operator "-", the result is incorrect

Posted by Bernd Fehling <be...@uni-bielefeld.de>.
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" <be...@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" <be...@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" <sl...@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.
>>>

Re: Use boolean operator "-", the result is incorrect

Posted by Bernd Fehling <be...@uni-bielefeld.de>.
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" <be...@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" <sl...@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.
> 

Re: Use boolean operator "-", the result is incorrect

Posted by Bernd Fehling <be...@uni-bielefeld.de>.
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" <sl...@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.