我有一个这样的文档模型:
"customer": {
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"orders": {
"type": "nested",
"properties": {
"id": { "type": "integer" },
"orderDate" : { "type": "date", "format" : "YYYY-MM-dd" },
"orderLines": {
"type": "nested",
"properties": {
"seqno": { "type": "integer" },
"quantity": { "type": "integer" },
"articleId": { "type": "integer" }
}
}
}
}
}
}
客户可以有0、1或多个订单,而一个订单可以有0、1或多个orderLines
(这是我为该问题创建的模型,因为我认为这是每个人都可以理解的数据,因此,如果您发现任何错误,请告诉我,但不要让他们从我的实际问题中分散注意力)
我想使用NEST创建一个查询,该查询选择一个(或所有)具有customer.id特定值的客户,但前提是他们具有至少一个具有特定articleId的orderLine。
我查看了Need concrete documentation / examples of building complex index using NEST ElasticSearch library和Matching a complete complex nested collection item instead of separate members with Elastic Search,但是无法创建查询。根据第二个问题,我写到了
var results = client.Search<customer>(s => s
.From(0)
.Size(10)
.Types(typeof(customer))
.Query(q =>
q.Term(c => c.id, 12345)
&& q.Nested(n => n
.Path(c => c.order)
.Query(q2 => q2.Nested(n2 => n2
.Path(o => o.???))))
)
);
我希望第二条路径将订单(订单是列表)用作通用类型,但它是客户。
正确查询的代码是什么?
另外:与http://nest.azurewebsites.net/上的文档相比,NEST的搜索/查询/过滤方法是否有更详尽的文档?在第一个引用的问题中,到复杂查询教程(正在讨论)的链接和单元测试示例(已接受的答案)都不起作用(分别是超时和404)。
最佳答案
假设我们正在按照这些路线对客户进行建模
class customer
{
public int id { get; set; }
public string name { get; set;}
public class Orders {
public int id { get; set;}
public string orderData { get; set;}
public class OrderLines
{
public int seqno { get; set; }
public int quantity { get; set; }
public int articleId { get; set; }
}
[ElasticProperty(Type = FieldType.Nested)]
public List<OrderLines> orderLines { get; set; }
}
[ElasticProperty(Type = FieldType.Nested)]
public List<Orders> orders { get; set; }
};
在上述情况下的查询为:
var response = client.Search<customer>(
s => s.Index(<index_name_here>).Type("customer")
.Query(q => q.Term(p=>p.id, 1)
&&
q.Nested(n =>
n.Path("orders")
.Query(q2=> q2.Nested(
n2 => n2.Path("orders.orderLines")
.Query(q3 =>
q3.Term(c=>c.orders.First().orderLines.First().articleId, <article_id_here>)))))
));
就文档而言,我遇到的最好的问题与问题中的一个you posted以及链接在那里的资源相同。
关于elasticsearch - Elasticsearch NEST-过滤多层嵌套类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26800533/