elasticsearch 检查全文字段的日期是否在某个范围内,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 检查全文字段的日期是否在某个范围内,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 检查全文字段的日期是否在某个范围内

elasticsearch 检查全文字段的日期是否在某个范围内,elasticsearch,nest,elasticsearch,Nest,您好,我是弹性世界的新手,我正在试图弄清楚如何找到一个字段,例如“text”(表示索引的整个文本)的日期是否在特定范围内 例如: 在“文本”字段的doc_1中,我们有“我出生于1995年5月27日”,我想检查该文件中是否有日期,即1995年5月20日至1995年5月30日之间 如果这是不可能的,那么当我索引此文档时,如何将此日期“27/05/1995”存储到新字段中?当我们谈论索引包含日期的文档时,你能给我一个关于最佳方法的建议吗 谢谢你我想你有多种选择。要搜索日期范围内的文档,您必须解析文本中

您好,我是弹性世界的新手,我正在试图弄清楚如何找到一个字段,例如“text”(表示索引的整个文本)的日期是否在特定范围内

例如: 在“文本”字段的doc_1中,我们有“我出生于1995年5月27日”,我想检查该文件中是否有日期,即1995年5月20日至1995年5月30日之间

如果这是不可能的,那么当我索引此文档时,如何将此日期“27/05/1995”存储到新字段中?当我们谈论索引包含日期的文档时,你能给我一个关于最佳方法的建议吗


谢谢你

我想你有多种选择。要搜索日期范围内的文档,您必须解析文本中的日期,并在elasticsearch中将其索引为日期字段。您可以在将文档发送到elasticsearch之前在应用程序中执行此操作,也可以查看摄取节点。摄取节点使您有机会在索引之前预处理文档


只要elasticsearch中的文档有一个单独的日期字段,您就可以使用范围查询来搜索:

我正在使用下面的正则表达式来匹配文本中的某些日期。我要找的日期格式是“yyyy-mm-dd”,您可以将span\u多个内部子句混洗,以查找您需要的格式。你可以阅读有关span的文章

映射

PUT testindex
{
  "mappings": {
    "properties": {
      "content":{
        "type": "text"
      }
    }
  }
}
数据:

查询:

GET testindex/_search
{
  "query": {
    "span_near": {
      "clauses": [
        {
----> clauses below look for year,month,date, you can change their order for desired
---->format
          "span_multi": {
            "match": {
              "regexp": {
                "content": "(19|20)[0-9]{2}"
              }
            }
          }
        },
        {
          "span_multi": {
            "match": {
              "regexp": {
                "content": "0[1-9]|1[012]"
              }
            }
          }
        },
         {
          "span_multi": {
            "match": {
              "regexp": {
                "content": "1[5-9]|[2][0]"  --> regex for date from 15-20
              }
            }
          }
        }
      ],
      "slop": 0,
      "in_order": true
    }
  }
}
结果

 [
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "bXPLFW0BY3127H1HaBwp",
        "_score" : 3.2095504,
        "_source" : {
          "content" : "I was born on 2019/09/15"
        }
      },
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "w3PLFW0BY3127H1HeBzg",
        "_score" : 3.2095504,
        "_source" : {
          "content" : "I was born on 2019/09/20"
        }
      }
    ]

非常感谢。我使用摄取管道、grok处理器和数据处理器来实现这一点。但我进入了另一个问题,如何在同一条消息中使用已知的grok模式未知次数,或者如何使用自定义模式来实现这一点?我尝试使用带有全局标志的正则表达式,但该标志无法识别,因为当我写入/g标志时,ES认为我的正则表达式是错误的。我在网上查看了正则表达式,现在运行良好。
 [
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "bXPLFW0BY3127H1HaBwp",
        "_score" : 3.2095504,
        "_source" : {
          "content" : "I was born on 2019/09/15"
        }
      },
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "w3PLFW0BY3127H1HeBzg",
        "_score" : 3.2095504,
        "_source" : {
          "content" : "I was born on 2019/09/20"
        }
      }
    ]