2

我有一个具有以下映射的字段:

birthdate: { type: :date, format: :dateOptionalTime }
  1. 我需要找到所有出生在 5 月的人(包括所有年份)
  2. 另一个查询是查找所有出生于“8 月 25 日”的人(包括所有年份)

那会是什么查询?

4

4 回答 4

4

您可以使用过滤器实现此目的script

任何一年五月出生的人:

{
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "doc.birthdate.date.monthOfYear == 5"
        }
      }
    }
  }
}

所有出生于 8 月 25 日(任何年份)的人

{
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "doc.birthdate.date.monthOfYear == 8 && doc.birthdate.date.dayOfMonth == 25"
        }
      }
    }
  }
}
于 2015-09-18T04:12:51.980 回答
3

只是为了存档,ES 7 带来了一些制动变化https://www.elastic.co/guide/en/elasticsearch//reference/current/break-changes-7.0.html#_getdate_and_getdates_removed

就是现在:

POST /people/_search?size=50
{
  "query": {
    "bool" : {
      "filter" : {
       "script" : {
          "script" : {
            "source": "doc['jour'].value.getMonthValue() == 5",
            "lang": "painless"
          }
        }
      }
    }
  }
}
于 2019-10-20T08:15:31.440 回答
0
GET index_name/doc_type/_search
{
    "query": {
        "bool" : {
            "filter" : {
                "script" : {
                    "script" : {
                        "source": "doc.field_name.date.getMonthOfYear() == month_number",
                        "lang": "painless"
                     }
                }
            }
        }
    }
}
于 2019-08-01T10:16:43.033 回答
-2

第一个问题:

POST /test_index/_search
{
   "query": {
      "filtered": {
         "filter": {
            "range": {
               "birthdate": {
                  "gte": "2015-05-01",
                  "lt": "2015-06-01"
               }
            }
         }
      }
   }
}

第二个问题:

POST /test_index/_search
{
   "query": {
      "filtered": {
         "filter": {
            "range": {
               "birthdate": {
                  "gte": "2015-08-25",
                  "lte": "2015-08-25"
               }
            }
         }
      }
   }
}

这是我用来测试它的代码:

http://sense.qbox.io/gist/36c800cabbe4143ecf72144d02e58e267c1e761a

于 2015-09-17T21:56:41.310 回答