gpt4 book ai didi

elasticsearch - Elasticsearch 中的“出生日期”字段的部分日期搜索

转载 作者:行者123 更新时间:2023-12-03 02:37:15 24 4
gpt4 key购买 nike

我有一个字段是dateofbirth,其映射如下所示
“出生日期” : {
“type”:“date”,
“字段”:{
“ token ”:{
“type”:“text”
}
},
“ignore_malformed”:是的,
“格式”:“yyyy-MM-dd”
},
我有一个用例,我需要根据yyyydd&yyyy&yyyyMM进行搜索,在这种情况下,是否有人知道如何应用分析器,以便可以创建 token 进行搜索。

最佳答案

以上有多种解决方法。

  • 为年,月和日创建其他字段
  • {
    "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"
    }
    }
    }
    ]
    }
    }
    }
  • 使用范围查询。
    对于yyyydd
  • {
    "query": {
    "bool": {
    "must": [
    {
    "range": {
    "dateofbirth": {
    "gte": "2019-01-05",
    "lte": "2019-12-31"
    }
    }
    }
    ]
    }
    }
    }

    对于年份范围将是2019-01-01和2019-12-31。,对于yyyyMM范围将是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。

    关于elasticsearch - Elasticsearch 中的“出生日期”字段的部分日期搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58645671/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com