我正在尝试在我的索引中查询某种类型的文档。
让我们看看下面的文档:
{
"id": 1,
"title": "My first Collection",
"items": [
{
"code": "SB",
"order": 1,
"random": "something random"
},
{
"code": "BB",
"order": 2,
"random": "something random"
},
{
"code": "FO",
"order": 3,
"random": "something random"
},
{
"code": "RA",
"order": 4,
"random": "something random"
},
{
"code": "FO",
"order": 5,
"random": "something random"
}
]
}
Run Code Online (Sandbox Code Playgroud)
该items
场是一个nested
场。
我想查询所有与确切模式匹配的文章:
{
"items": [
{
"code": "SB",
"order": 1
},
{
"code": "BB",
"order": 2
},
{
"code": "FO",
"order": 3
},
{
"code": "RA",
"order": 4
}
]
}
Run Code Online (Sandbox Code Playgroud)
查询的文档将包含所有这 4 个项目,并具有这种精确的字段组合。但他们也可以拥有更多。上面描述的文档将匹配查询。
我搜索了整个文档,特别是在嵌套查询部分,我没有找到任何让它工作的方法。
甚至可能还是应该实现我自己的算法/脚本?
编辑:
我尝试了以下但没有成功:
{
"query": {
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "items.code:SB AND items.order:1"
}
},
{
"query_string": {
"query": "items.code:BB AND items.order:2"
}
},
{
"query_string": {
"query": "items.code:FO AND items.order:3"
}
}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此查询有效:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{
"term": {
"items.code": "SB"
}
},
{
"term": {
"items.order": "1"
}
}
]
}
}
}
},
{
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{
"term": {
"items.code": "BB"
}
},
{
"term": {
"items.order": "2"
}
}
]
}
}
}
},
{
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{
"term": {
"items.code": "FO"
}
},
{
"term": {
"items.order": "3"
}
}
]
}
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这基本上是您使用的那个,但是nested
为每个子查询而不是整体指定了。
当您使用nested
关键字时,您是在告诉 ElasticSearch 尝试在与主文档分离的嵌套文档中进行匹配。当然,考虑到你的榜样,一个项目不能有所有的代码顺序夫妇"SB"-1
,"BB"-2
并"FO"-3
在同一时间。但是您可以使用 3 个嵌套查询分别要求它们。
归档时间: |
|
查看次数: |
2111 次 |
最近记录: |