如何查询同时包含键值对“key1”-“value1”和“key2”-“value2”的文档?我似乎找不到关于这个的任何文件。
我尝试了下面的查询,但它没有返回任何结果,即使应该有匹配的文档。虽然用should替换must是可行的,但当我将minimum_should_match=100%时,它也不会返回任何结果。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "attributes",
"query": {
"bool": {
"must": [
[
{
"match_phrase": {
"attributes.key": "key1"
}
},
{
"match_phrase": {
"attributes.value": "value1"
}
}
],
[
{
"match_phrase": {
"attributes.key": "key2"
}
},
{
"match_phrase": {
"attributes.value": "value2"
}
}
]
]
}
}
}
},
[
{
"match_all": {
}
}
]
]
}
}
}
这是映射的外观:
{
"index_name": {
"mappings": {
"type_name": {
"properties": {
"attributes": {
"type": "nested",
"properties": {
"key": {
"type": "string",
"analyzer": "flat"
},
"value": {
"type": "string",
"analyzer": "flat"
}
}
}
}
},
}
}
}
非常感谢你的帮助。
我在Elastic 5中遇到了同样的问题,不得不稍微调整建议的答案以使其正常工作,因为过滤查询已被弃用。(没有收到为[filtered]注册的[query])。
使用Elastic 5,以下结构为我解决了此问题:
{
"query" : {
"bool" : {
"must" : [
{
"nested" : {
"path": "attributes",
"query" : {
"bool" : {
"must" : [
{ "term" : { "attributes.key" : "key1" } },
{ "term" : { "attributes.value" : "value1" } }
]
}
}
}
},
{
"nested" : {
"path" : "attributes",
"query" : {
"bool" : {
"must" : [
{ "term" : { "attributes.key" : "key2" } },
{ "term" : { "attributes.value" : "value2" } }
]
}
}
}
}
]
}
}
}
试试这个:
POST /test_index/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "attributes",
"query": {
"bool": {
"must": [
{
"term": {
"attributes.key": "key1"
}
},
{
"term": {
"attributes.value": "value1"
}
}
]
}
}
}
},
{
"nested": {
"path": "attributes",
"query": {
"bool": {
"must": [
{
"term": {
"attributes.key": "key2"
}
},
{
"term": {
"attributes.value": "value2"
}
}
]
}
}
}
}
]
}
}
}
}
}
下面是我用来测试它的代码(我只是使用了标准
分析器,因为我不知道你的平面
分析器是什么样子;所以你可能需要调整一下):
http://sense.qbox.io/gist/13b7e2aa4d90bfb2f82787c6a00494ee3343e013
> 检查Postgres JSON数组是否包含字符串 在postgreSQL中从表中查询json对象 带有嵌入JSON对象的PostgreSQL JSON查询 如何实现这些查询?我相信如果我知道如何查询一个问题,那么我将能够解决其他问题。 我将提供任何可能需要的信息来解决这个问题。
问题内容: 假设我创建了一个像这样的文档: 我可以使用GET / idx / type / 1检索文档: 现在,我想检查字段“ the_field”是否包含值2。我知道我可以使用term子句,但是我需要使用过滤器脚本检查它,因此我尝试了: 并没有结果: 为了测试我的mevl脚本语法是否正确,我尝试这样做: 并获得正确的结果: 我究竟做错了什么? 我认为doc [‘the_field’]。value
问题内容: 我使用 PostgreSQL 9.5 和Rails5。我想查询下面显示的包含JSON对象数组的列,以返回包含并执行计数的所有JSON数组元素。我使用 的 SQL 显示在json数据下方。运行查询只会返回一个空数组。 这是我的数据: 我想要其中一个sql查询返回: 和另一个查询以返回数组,以便我可以在应用程序中对其调用count,还可以遍历它以创建表单: 我试过这个SQL查询: 我也试过
我使用PostgreSQL 9.5和Rails 5。我想查询下面显示的包含JSON对象数组的jsonb列,以返回包含的所有JSON数组元素,并执行计数 我使用的SQL显示在json数据下面。运行查询只返回一个空数组。 我尝试了这里和这里建议的查询。 这就是我的jsonb数据的样子: 我希望其中一个sql查询返回: 和另一个返回数组的查询,以便我可以在我的应用程序中调用count并循环使用它来创建表
问题内容: 我有一对对。是否可以精确匹配&的值,然后检查其范围值? 示例:在doc下面是一个带有名称,值对的数组。我需要检查它是否具有键,然后检查它的值是否小于1000。 以下是我的过滤器。 我还需要检查以下内容,以便返回结果 “ client.name”必须是“ Athena” “ client.db。@ type”必须为“ Oracle”,然后继续进行以下检查 找不到“ client.db.o
如果我有文件: 我想用“红棕色黄”查询,得到文档1。 我怎么能这么做?反过来很容易...