如何在elasticsearch
中编写以下条件的查询Select * from table1 where (cnd1 or cond2) and (cnd3)
我的cond2值来自嵌套对象。我的json对象在
之下details={ "name"="name1",
"address":"{
"city":"city1"
}"
}
我需要从上面的对象中取出城市
details.address.city
上面的语法是否正确,如果不是如何获得第二个对象城市的价值。
答案 0 :(得分:0)
{
"bool" : {
"must" : cond3,
"should" : [
cond1,
cond2
],
"minimum_should_match" : 1
}
}
通过此链接获取更多信息https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html
答案 1 :(得分:0)
您可以使用Elasticsearch轻松创建条件查询。但是你的数据部分有一些奇怪的情况。
details={ "name"="name1",
"address":"{
"city":"city1"
}"
}
Elasticsearh将您的数据保存为json对象,但您应该将数据作为json提供。在本节中,有一个对象,您尝试发送。让我们来看看:
详细对象有一个name属性,它是一个字符串。并且还有一个地址属性,它也是一个字符串。如果您想通过details.address.city
到达此对象,它应该是一个必须包含城市属性的对象。现在我们尝试修复:
{
"id":...,
...
"details": {
"name": "name1",
"address": {
"city": "city1"
}
}
}
在这种情况下,我删除了细节对象的双引号。现在,您可以将json的city属性作为json对象。现在,我们创建一个到达城市的查询:
{
"query": {
"bool": {
"must": {
"term": {
"your-json-attribute": "???"
}
},
"should": [
{
"term": {
"your-json-attribute": "???"
}
},
{
"term": {
"your-json-attribute": "???"
}
}
]
}
}
}
我使用term
查询,但还有很多其他查询类型。您可以在文档上查看它们。但对于And
和Or
,您可以使用bool
查询。查看https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-bool-query.html