demonstrate fluent queries to exclude fields with empty values (#4579)
a `TermQuery` with an empty string `Value` is considered by the .NET client to be "conditionless" and is removed from the search request body by default. for those times that you want to use a `TermQuery` with an empty string `Value` (e.g. show me all documents with a non-empty last_name property) you need to use the `.Verbatim()` method to tell the client library to include the `TermQuery` as written even though it is considered to be "conditionless". in other words, while a "conditionless" query may not make sense in the positive it can make sense in the negative ``` GET /my-index/_search { "query": { "bool": { "must": [{ "exists": { "field": "last_name"} }], "must_not": [{ "term": {"last_name.keyword": { "value": "" }} }] } }, } ``` Signed-off-by: David Alpert (Next League) <112503249+david-alpert-nl@users.noreply.github.com>
This commit is contained in:
parent
42e8a1bdca
commit
ca40c6191c
|
@ -299,6 +299,19 @@ internal class Program
|
||||||
PrintResponse(searchResponse);
|
PrintResponse(searchResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void SearchForAllStudentsWithANonEmptyLastName()
|
||||||
|
{
|
||||||
|
var searchResponse = osClient.Search<Student>(s => s
|
||||||
|
.Index("students")
|
||||||
|
.Query(q => q
|
||||||
|
.Bool(b => b
|
||||||
|
.Must(m => m.Exists(fld => fld.LastName))
|
||||||
|
.MustNot(m => m.Term(t => t.Verbatim().Field(fld => fld.LastName).Value(string.Empty)))
|
||||||
|
)));
|
||||||
|
|
||||||
|
PrintResponse(searchResponse);
|
||||||
|
}
|
||||||
|
|
||||||
private static void SearchLowLevel()
|
private static void SearchLowLevel()
|
||||||
{
|
{
|
||||||
// Search for the student using the low-level client
|
// Search for the student using the low-level client
|
||||||
|
|
Loading…
Reference in New Issue