public class User
{
public string Email { get; set; }
public int Age { get; set; }
public bool Active { get; set; }
}
client.Index(new User { Email ="test@test.te" });
在Linq C#中查询例如:
rep.Where(user=>user.Email=="test@test.te" && (user.Age>18 || user.Active== true));
如何为Elasticsearch进行此查询(我的意思是Elasticsearch中的相同查询)?
答案 0 :(得分:2)
您可以使用以下组合:
range
过滤了age
字段(reference)term
过滤了email
和active
字段(reference)bool
过滤器,其中包含should
子句(相当于OR),以合并age
和active
过滤器(reference)bool
过滤器,用于将前一个过滤器与email
子句中的must
过滤器相结合(相当于AND)filtered
查询,可以使用上面定义的过滤器。了解differences between query and filters。
可能对您有用你应该这样结束:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"email": "test@test.te"
}
},
{
"bool": {
"should": [
{
"range": {
"age": {
"gt": 18
}
}
},
{
"term": {
"active": "true"
}
}
]
}
}
]
}
}
}
}
}
注意:
要使此查询生效,电子邮件字段必须为not_analyzed
,因为字词过滤器会查找完全相同的值。