我是Elastic Search和NEST的新手 我在ES中的文档结构如下:
{
"Quote":"QuoteId1",
"references" : [
{
"ref" : "8658315",
"rel" : "Number"
},
{
"ref" : "E",
"rel" : "Type"
},
{
"ref" : "2001511072965",
"rel" : "Order"
}
]
}
{
"Quote":"QuoteId2",
"references" : [
{
"ref" : "8658316",
"rel" : "Number"
},
{
"ref" : "E",
"rel" : "Type"
},
{
"ref" : "",
"rel" : "Order"
}
]
}
{
"Quote":"QuoteId2",
"references" : [
{
"ref" : "8658316",
"rel" : "Number"
},
{
"ref" : "E",
"rel" : "Type"
}
]
}
我想检索所有引号:
1) Quotes which have Rel = "Order" and Ref == "" (Quotes which were ordered but are invalid now)
2) Quotes which does not have Rel = "Order" (Quotes which are not ordered at all)
1) Quotes which have Rel = "Order" and Ref == "" (Quotes which were ordered but are invalid now)
Tried retrieving the quotes using below NEST query :
a) var searchFieldList = new List<string>() { "Order" };
queryContainer &= Query<QuoteIndex>.Nested(
a => a.Path(o => o.References).Query(q => q.Bool(b => b.Filter(
m => !m.Terms(t => t.Field(f => f.References.Select(st => st.Rel).ToArray()).Terms(searchFieldList)) &&
!m.Range(r => r.Field(f1 => f1.References.Select(st1 => st1.Ref)).GreaterThan(0))
))));
b) var searchFieldList = new List<string>() { "Order" };
var searchFieldValue = new List<string>() { "" };
queryContainer &= Query<QuoteIndex>.Nested(
a => a.Path(o => o.References).Query(q => q.Bool(b => b.Strict().Must(
m => m.Terms(t => t.Field(f => f.References.Select(st => st.Rel).ToArray()).Terms(searchFieldList)) &&
m.Terms(t => t.Verbatim().Field(f => f.References.Select(st => st.Ref).ToArray()).Terms(searchFieldValue))
))));
Result: both queries returns QuoteID1 i.e where REL = "Order" and Ref = "2001511072965"
2) Quotes which does not have Rel = "Order" (Quotes which are not ordered at all)
Tried retrieving the quotes using below NEST query :
a) var searchFieldList = new List<string>() { "Order" };
queryContainer &= Query<QuoteIndex>.Nested(
a => a.Path(o => o.References).Query(q => q.Bool(b => b.Filter(
m => !m.Terms(t => t.Field(f => f.References.Select(st => st.Rel).ToArray()).Terms(searchFieldList))
))));
b) var searchFieldList = new List<string>() { "Order" };
queryContainer &= Query<QuoteIndex>.Nested(
a => a.Path(o => o.References).Query(q => q.Bool(b => b.Strict().MustNot(
m => m.Terms(t => t.Field(f => f.References.Select(st => st.Rel).ToArray()).Terms(searchFieldList))
))));
Result: both queries returns QuoteID1 i.e where REL = "Order" and Ref = "2001511072965"
我需要获取Rel =“ Order” && Ref ==“” union的文档,其中Rel =“ Order”不存在,但无法通过上述查询获取相同的文档,任何帮助都将非常有用>