On 5/26/2016 11:13 PM, Anil wrote:
> We have status text field in our solr document and it is optional.
> search query status: !Closed returning documents with no status as
> well. how to get only documents having status and it is !Closed ? one
> way is status:* AND status:!Closed . any other way ? Thanks

If you use status:* then you are doing a wildcard query.  If the status
field has a large number of unique values, this will be VERY slow. 
Avoid wildcard queries unless they are the only way to accomplish what
you need.

If the status field has more than a few possible values, the most
compact way to do this query efficiently would be:

status:[* TO *]-status:Closed

This could be written as:

status:[* TO *] AND NOT status:Closed

See this article about why this may not be the best way to write queries:

https://lucidworks.com/blog/2011/12/28/why-not-and-or-and-not/

The [] syntax is a range query.  By starting and ending the range with
the * character, it means "all documents where status has a value".

Thanks,
Shawn

Reply via email to