ElasticSearch:如何在集合中搜索
ElasticSearch: How do I search within a collection
我在 ElasticSearch 中有以下对象结构:
{
_id: 1,
myObj: {
myCol: [{id: 1, name:"1"}, {id: 2, name:"2"}, {id: 3, name:"3"}]
}
},
{
_id: 2,
myObj: {
myCol: [{id: 2, name:"2"}, {id: 3, name:"3"}, {id: 4, name:"4"}]
}
},
我正在使用 C# NEST 库创建查询。我想使用标识符集合搜索 myCol 对象集合。
示例#1:
搜索请求:标识符 [2, 3]
结果:返回两个对象
示例#2:
搜索请求:标识符:[1]
结果:返回第一个对象
示例#3:
搜索请求:标识符:[1, 2, 3, 4]
结果:没有返回对象
我正在尝试做的是查询 "Contains all"。
请注意:
- C# NEST MultiMatchQuery 类型不支持整数数组(仅支持字符串。太糟糕了)。所以请不要让我使用这种类型的查询
- 我正在使用对象初始化程序查询语法
- 使用 ElasticSearch 语法进行正确的查询就足够了。
您想要的是获取集合中某处包含所有指定 ID 的文档。
当您在 ElasticSearch 中使用对象集合时,它们会被展平,因此您实际上 索引类似于以下内容。
myObj.myCol.id = [ 2, 3, 4 ]
myObj.myCol.name = [ "2", "3", "4" ]
在许多情况下,这是有问题的,因为您忘记了哪对 ID/Name 在一起(因此您不能,例如,查询包含 ID 为 x
的对象的文档和名称 y
- 如果集合在 不同的 对象中包含 x
和 y
,它将产生误报。
但是,对于您的情况,它实际上是有益的,因为您可以只查询包含 myObj.myCol.id
中所有 ID 的文档,例如:
{
"query": {
"bool": {
"must": [
{ "match": { "myObj.myCol.id": 1 }},
{ "match": { "myObj.myCol.id": 2 }}
]
}
}
}
这只会 return 文档,其中 myObj.myCol
包含 ID 为 1 和 2 的对象。
可以找到有关 ES 中集合如何工作的更多信息here。
我在 ElasticSearch 中有以下对象结构:
{
_id: 1,
myObj: {
myCol: [{id: 1, name:"1"}, {id: 2, name:"2"}, {id: 3, name:"3"}]
}
},
{
_id: 2,
myObj: {
myCol: [{id: 2, name:"2"}, {id: 3, name:"3"}, {id: 4, name:"4"}]
}
},
我正在使用 C# NEST 库创建查询。我想使用标识符集合搜索 myCol 对象集合。
示例#1: 搜索请求:标识符 [2, 3] 结果:返回两个对象
示例#2: 搜索请求:标识符:[1] 结果:返回第一个对象
示例#3: 搜索请求:标识符:[1, 2, 3, 4] 结果:没有返回对象
我正在尝试做的是查询 "Contains all"。
请注意:
- C# NEST MultiMatchQuery 类型不支持整数数组(仅支持字符串。太糟糕了)。所以请不要让我使用这种类型的查询
- 我正在使用对象初始化程序查询语法
- 使用 ElasticSearch 语法进行正确的查询就足够了。
您想要的是获取集合中某处包含所有指定 ID 的文档。
当您在 ElasticSearch 中使用对象集合时,它们会被展平,因此您实际上 索引类似于以下内容。
myObj.myCol.id = [ 2, 3, 4 ]
myObj.myCol.name = [ "2", "3", "4" ]
在许多情况下,这是有问题的,因为您忘记了哪对 ID/Name 在一起(因此您不能,例如,查询包含 ID 为 x
的对象的文档和名称 y
- 如果集合在 不同的 对象中包含 x
和 y
,它将产生误报。
但是,对于您的情况,它实际上是有益的,因为您可以只查询包含 myObj.myCol.id
中所有 ID 的文档,例如:
{
"query": {
"bool": {
"must": [
{ "match": { "myObj.myCol.id": 1 }},
{ "match": { "myObj.myCol.id": 2 }}
]
}
}
}
这只会 return 文档,其中 myObj.myCol
包含 ID 为 1 和 2 的对象。
可以找到有关 ES 中集合如何工作的更多信息here。