【问题标题】:ElasticSearch query for documents based on active date element in arrayElasticSearch 根据数组中的活动日期元素查询文档
【发布时间】:2018-08-19 20:56:28
【问题描述】:

我有一个 ElasticSearch 索引,其中的数据在我复制粘贴到底部时被编入索引。

想法是它有文档,并且文档的“正式名称”在一个数组中。这是因为文件的正式名称在一段时间内有效(即 2014 年至 2015 年期间名称为 X,2016 年至 2018 年期间为 Y)。

我想要的是一个简单的查询,它根据name 属性查找文档,但它在今天有效。

文档地图

"Company": {
        "properties": {
          "vatNumber": {
            "type": "string"
          },
          "names": {
            "type": "nested",
            "include_in_parent": true,
            "properties": {
              "name": {
                "type": "string"
              },
              "period": {
                "properties": {
                  "validFrom": {
                    "type": "date",
                    "format": "dateOptionalTime"
                  },
                  "validTo": {
                    "type": "date",
                    "format": "dateOptionalTime"
                  }
                }
              },
              "lastUpdated": {
                "type": "date",
                "format": "dateOptionalTime"
              }
            }
          }}}

我的尝试

我使用 NEST(.NET 客户端)。我假设有 2 个总体“挑战”:

  1. 我需要引用数组中的一个属性(name
  2. 我需要 检查validTo 确实是null(忽略另一个 数组中的实体)

但是,在搜索之后,我对这两个很迷茫!

【问题讨论】:

  • 您正在寻找的是嵌套查询,您可以在其中指定嵌套字段的路径(此处为names.name 和names.period.validTo)。要检查字段是否为空,请在 bool 查询的 must_not 子句中使用存在查询。
  • @sramalingam24 完美,这让我走上了正确的道路。还没有完全解决,但是因为其他问题。你能提供一个答案吗?然后我会将其标记为已解决:)
  • 好交易,应该从这里开始

标签: elasticsearch nest elasticsearch-net elasticsearch-dsl


【解决方案1】:

您正在寻找的是嵌套查询,您可以在其中指定嵌套字段的路径(此处为names.name 和names.period.validTo)。要检查字段是否为空,请在 bool 查询的 must_not 子句中使用存在查询。这是一个示例

GET /_搜索

{
    "query": {
        "nested" : {
            "path" : "names",
            "query" : {
                "bool" : {
                    "must":{
                        "term": {
                            "names.name": "Lars"
                        }
                    },
                    "must_not" :{
                        "exists": {
                            "field": "names.period.validTo"
                        }
                    }
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2015-09-19
    • 2021-07-21
    相关资源
    最近更新 更多