构建具有嵌套属性的 NEST/ElasticSearch 查询
Constructing a NEST/ElasticSearch query with nested properties
我正在使用 C# 中的 NEST 查询 ElasticSearch 数据库(丹麦 CVR 注册表)。我正在尝试制定一个将查询此方案的查询:
relations: [
{
participant: {
key: 123123
},
organisations: [
{
organisationName: {
name: "some string",
period: {
from: "SOME DATE"
to: "SOMEDATE OR NULL"
}
},
... more of similar objects ..
}
]
},
.. more of similar objects ..
]
我的问题是我需要找到具有特定 participant.key 值的文档,同时具有特定的 organisations.organisationName.name 和 [=27= 中的缺失值或空值]
我知道我需要使用嵌套查询来获取在 to 字段中具有空值且在 name 字段中具有特定名称的文档,但最重要的是我还需要在particiant.key 字段,这就是我遇到麻烦的地方。请注意,我检查的所有 3 个字段必须在同一个关系对象中,并且 to 和 name 字段必须在同一个 organizationName 对象中。
没有关键部分的查询作为JSON查询是这样的:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "relations.organisations.organisationName",
"score_mode": "max",
"query": {
"bool": {
"must": [
{ "match": { "relations.organisations.organisationName.name": "EJERREGISTER" }},
{"filtered": { "filter" : {
"missing" : { "field" : "relations.organisations.organisationName.period.to" }
} } }
]
}}}}
]
}}}
希望有人擅长在 NEST 查询 DSL 中进行这些查询。我也可以使用纯 ElasticSearch JSON 查询,但 .NET 等效项将是我的首选:)
提前致谢!
经过一些实验,我得出的结论是,我的问题的正确答案是使用嵌套查询的查询,该查询 1. 检查密钥,并且 2. 有一个嵌套查询来执行我需要的其他操作organisation.organisationName 对象。
但是,我无法完全验证这一点,因为我正在查询的数据库没有标记为嵌套的关系对象(而且我无法更改它,因为它是政府数据库)
我的解决方法是检索与我的键相关的所有关系,然后过滤掉内存中剩余的对象,因为这在我的场景中并没有太多开销。
编辑:作为后续行动,我使用的外部数据库添加了嵌套子句,它的工作原理如上所述。
我正在使用 C# 中的 NEST 查询 ElasticSearch 数据库(丹麦 CVR 注册表)。我正在尝试制定一个将查询此方案的查询:
relations: [
{
participant: {
key: 123123
},
organisations: [
{
organisationName: {
name: "some string",
period: {
from: "SOME DATE"
to: "SOMEDATE OR NULL"
}
},
... more of similar objects ..
}
]
},
.. more of similar objects ..
]
我的问题是我需要找到具有特定 participant.key 值的文档,同时具有特定的 organisations.organisationName.name 和 [=27= 中的缺失值或空值]
我知道我需要使用嵌套查询来获取在 to 字段中具有空值且在 name 字段中具有特定名称的文档,但最重要的是我还需要在particiant.key 字段,这就是我遇到麻烦的地方。请注意,我检查的所有 3 个字段必须在同一个关系对象中,并且 to 和 name 字段必须在同一个 organizationName 对象中。
没有关键部分的查询作为JSON查询是这样的:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "relations.organisations.organisationName",
"score_mode": "max",
"query": {
"bool": {
"must": [
{ "match": { "relations.organisations.organisationName.name": "EJERREGISTER" }},
{"filtered": { "filter" : {
"missing" : { "field" : "relations.organisations.organisationName.period.to" }
} } }
]
}}}}
]
}}}
希望有人擅长在 NEST 查询 DSL 中进行这些查询。我也可以使用纯 ElasticSearch JSON 查询,但 .NET 等效项将是我的首选:)
提前致谢!
经过一些实验,我得出的结论是,我的问题的正确答案是使用嵌套查询的查询,该查询 1. 检查密钥,并且 2. 有一个嵌套查询来执行我需要的其他操作organisation.organisationName 对象。
但是,我无法完全验证这一点,因为我正在查询的数据库没有标记为嵌套的关系对象(而且我无法更改它,因为它是政府数据库)
我的解决方法是检索与我的键相关的所有关系,然后过滤掉内存中剩余的对象,因为这在我的场景中并没有太多开销。
编辑:作为后续行动,我使用的外部数据库添加了嵌套子句,它的工作原理如上所述。