12

The last option to solve this for me was to ask StackOverflow.

I am trying to create a Solr query to get documents that have a specific value on one of its fields OR that does not have a value...

Theorically, this query should have worked.

Here is some information:

Query: (name: john) --> Result count: 15383 //Johns

Query: (name: {* TO *}) --> Result count: 61013 //People that have a name

Query: -(name: {* TO *}) --> Result count: 216888 //People that do not have a name

Now, when I use first and third query in a same query with OR operator, I expect to get (216888 + 15383) results. But SOLR gives 15383 results, simply ignores the effect of third query:

Query: +((name:john) (-(name:{* TO *}))) //This is the query I was used.

Is this a bug of Solr or am I doing wrong in query? Merging two query results is an additional solution but I do not want to do extra code implementation if I could do it with a simple query.

Any help would be appreciated.

Machavity
  • 30,841
  • 27
  • 92
  • 100
Emre Can Geçer
  • 395
  • 3
  • 4
  • 14

4 Answers4

25

(-name:[* TO *] AND *:*) OR name:john

Aliya
  • 1,168
  • 12
  • 17
  • This is just what I needed. Thanks. Would you be able to explain what `AND *:*` does in this example? I see that my search doesn't work if I leave that part out, I'm just not sure why. – Scott P Sep 23 '16 at 20:43
  • 4
    `*:*` means all rows. `*:* -name:*` means all rows without a name value. `name:john OR (*:* -name:*)` can be translated into SQL as `name='john' OR name IS NULL` – Semra Oct 06 '17 at 21:07
1

You can also use it like this.

&fq=name:john OR !name:['' TO *]
user1976546
  • 151
  • 1
  • 8
0

you can use below to get results which is null and rest

-name:[* TO *] OR *:*
C. Peck
  • 3,641
  • 3
  • 19
  • 36
user_mes
  • 55
  • 1
  • 5
-1

try the below query -

q=(name:john OR -(name:[* TO *]))
Jayendra
  • 52,349
  • 4
  • 80
  • 90