我在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.period.to <中有一个特定的organisations.organisationName.name和一个缺失或空值。 / p>
我知道我需要使用嵌套查询来获取在to字段中具有空值和在name字段中具有特定名称的文档,但除此之外,我还需要在特定字符中具有特定键。 .key领域,这就是我遇到麻烦的地方。请注意,我正在检查的所有3个字段必须位于相同的关系对象中,并且to和name字段必须位于同一organisationName对象中。
没有关键部分作为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 Query DSL中进行这些查询。我也可以使用纯ElasticSearch JSON查询,但.NET等价物将是我的首选选项:)
提前致谢!
答案 0 :(得分:0)
经过一些实验,我得出的结论是,我的问题的正确答案将是一个嵌套查询的查询:1。检查密钥,并且2.有一个嵌套查询,可以完成组织中我需要的其他事情。 organisationName对象。
但是,我无法完全验证这一点,因为我查询的数据库没有标记为嵌套的关系对象(我不能更改它,因为它是一个政府数据库)我的解决方法是检索与我的密钥相关的所有关系,然后过滤掉内存中剩余的对象,因为在我的场景中这不是太多开销。
编辑:作为后续工作,我正在使用的外部数据库添加了嵌套子句,它的工作原理如上所述。