Существует много способов решения выше.
- Создание дополнительных полей для года, месяца и дня
{
"mappings": {
"properties": {
"dateofbirth": {
"type": "date",
"fields": {
"tokens": {
"type": "text"
}
},
"ignore_malformed": true,
"format": "yyyy-MM-dd"
},
"year":{
"type": "integer"
},
"month":{
"type": "integer"
},
"day":{
"type": "integer"
}
}
}
}
Вы можете запросить его, используя несколько терминов на основепо формату нужно
{
"query": {
"bool": {
"must": [
{
"term": {
"year": {
"value": "VALUE"
}
}
},
{
"term": {
"month": {
"value": "VALUE"
}
}
}
]
}
}
}
Использование запроса диапазона. Для ггггд
{
"query": {
"bool": {
"must": [
{
"range": {
"dateofbirth": {
"gte": "2019-01-05",
"lte": "2019-12-31"
}
}
}
]
}
}
}
Для года диапазон будет 2019-01-01 и 2019-12-31., Для ггггМ диапазон будет 2019-10-01 и 2019-10-31
Использование сценария
{
"query": {
"bool": {
"must": [
{
"script": {
"script": {
"source": "int year = doc['dateofbirth'].value.getYear();int month = doc['dateofbirth'].value.getMonthValue();int day = doc['dateofbirth'].value.getDayOfMonth(); if(year==params.year && month==params.month) return true;",
"params": {
"year":2019,
"month":10
}
}
}
}
]
}
}
}
Вариант 1 будет иметь самую высокую производительность, а затем 2 и 3.