在 elasticsearch 中对日期字段进行部分搜索
Partial search on date fields in elasticsearch
我正在尝试在弹性搜索中的日期字段上实现部分搜索。例如,如果 startDate 存储为“2019-08-28”,我应该能够在查询“2019”或“2019-08”或“2019-0”时检索相同的内容。
对于其他领域我这样做:
{
"simple_query_string": {
"fields": [
"customer"
],
"query": "* Andrew *",
"analyze_wildcard": "true",
"default_operator": "AND"
}}
这对文本字段非常有效,但对日期字段无效。
这是映射:
{“映射”:{“属性”:{“开始日期”:{“类型”:“日期”}}}}
有什么方法可以实现,是改变映射还是其他查询方法?我还发现这个讨论与 elastic 中的部分日期有关,不确定它是否很相关但这里是:
摘自ES-Docs
Internally, dates are converted to UTC (if the time-zone is specified)
and stored as a long number representing milliseconds-since-the-epoch.
无法像在文本字段上那样进行搜索。但是,我们可以告诉 ES 将日期字段索引为日期和文本。例如
索引日期字段为multi-type:
PUT sample
{
"mappings": {
"properties": {
"my_date": {
"type": "date",
"format": "year_month_day",//<======= yyyy-MM-dd
"fields": {
"formatted": {
"type": "text", //<========= another representation of type TEXT, can be accessed using my_date.formatted
"analyzer": "whitespace" //<======= whitespace analyzer (standard will tokenized 2020-01-01 into 2020,01 & 01)
}
}
}
}
}
}
POST dates/_doc
{
"date":"2020-01-01"
}
POST dates/_doc
{
"date":"2019-01-01"
}
使用通配符查询进行搜索:如果需要,您甚至可以在索引时使用 n-grams 以加快搜索速度。
GET dates/_search
{
"query": {
"wildcard": {
"date.formatted": {
"value": "2020-0*"
}
}
}
}
我正在尝试在弹性搜索中的日期字段上实现部分搜索。例如,如果 startDate 存储为“2019-08-28”,我应该能够在查询“2019”或“2019-08”或“2019-0”时检索相同的内容。
对于其他领域我这样做:
{
"simple_query_string": {
"fields": [
"customer"
],
"query": "* Andrew *",
"analyze_wildcard": "true",
"default_operator": "AND"
}}
这对文本字段非常有效,但对日期字段无效。
这是映射: {“映射”:{“属性”:{“开始日期”:{“类型”:“日期”}}}}
有什么方法可以实现,是改变映射还是其他查询方法?我还发现这个讨论与 elastic 中的部分日期有关,不确定它是否很相关但这里是:
摘自ES-Docs
Internally, dates are converted to UTC (if the time-zone is specified) and stored as a long number representing milliseconds-since-the-epoch.
无法像在文本字段上那样进行搜索。但是,我们可以告诉 ES 将日期字段索引为日期和文本。例如
索引日期字段为multi-type:
PUT sample
{
"mappings": {
"properties": {
"my_date": {
"type": "date",
"format": "year_month_day",//<======= yyyy-MM-dd
"fields": {
"formatted": {
"type": "text", //<========= another representation of type TEXT, can be accessed using my_date.formatted
"analyzer": "whitespace" //<======= whitespace analyzer (standard will tokenized 2020-01-01 into 2020,01 & 01)
}
}
}
}
}
}
POST dates/_doc
{
"date":"2020-01-01"
}
POST dates/_doc
{
"date":"2019-01-01"
}
使用通配符查询进行搜索:如果需要,您甚至可以在索引时使用 n-grams 以加快搜索速度。
GET dates/_search
{
"query": {
"wildcard": {
"date.formatted": {
"value": "2020-0*"
}
}
}
}