当前日期介于两个日期之间的提升结果
Boost result which has the current date in between dates
我的映射有两个属性:
"news_from_date" : {
"type" : "string"
},
"news_to_date" : {
"type" : "string"
},
搜索结果具有属性 news_from_date、news_to_date
curl -X GET 'http://172.2.0.5:9200/test_idx1/_search?pretty=true' 2>&1
结果:
{
"news_from_date" : "2022-05-30 00:00:00",
"news_to_date" : "2022-06-23 00:00:00"
}
问题是:如何提高当前日期在“news_from_date”-“news_to_date”间隔之间的所有结果,以便它们显示为最高排名结果?
Tldr;
首先,如果您要使用日期,您可能应该使用 Elasticsearch
提供的日期类型之一。
他们有很多方法可以解决您的问题,使用无痛、使用评分函数甚至更经典的查询类型。
使用Should
使用 Boolean query type,你有多个子句。
- 必须
- 过滤器
- Must_not
- 应该
Should
允许 for optionals clause 计入最终得分。
所以你选择:
GET _search
{
"query": {
"bool": {
"should": [
{
"range": {
"news_from_date": {
"gte": "now"
}
}
},
{
"range": {
"news_to_date": {
"lte": "now"
}
}
}
]
}
}
}
请注意:
You can use the minimum_should_match parameter to specify the number or percentage of should clauses returned documents must match.
If the bool query includes at least one should clause and no must or filter clauses, the default value is 1. Otherwise, the default value is 0.
使用脚本
如 the documentation 所提供,您可以创建一个自定义函数,根据您自己的业务规则对您的文档进行评分。
脚本使用 Painless(java 的精简版)
GET /_search
{
"query": {
"function_score": {
"query": {
"match": { "message": "elasticsearch" }
},
"script_score": {
"script": {
"source": "Math.log(2 + doc['my-int'].value)"
}
}
}
}
}
我的映射有两个属性:
"news_from_date" : {
"type" : "string"
},
"news_to_date" : {
"type" : "string"
},
搜索结果具有属性 news_from_date、news_to_date
curl -X GET 'http://172.2.0.5:9200/test_idx1/_search?pretty=true' 2>&1
结果:
{
"news_from_date" : "2022-05-30 00:00:00",
"news_to_date" : "2022-06-23 00:00:00"
}
问题是:如何提高当前日期在“news_from_date”-“news_to_date”间隔之间的所有结果,以便它们显示为最高排名结果?
Tldr;
首先,如果您要使用日期,您可能应该使用 Elasticsearch
提供的日期类型之一。
他们有很多方法可以解决您的问题,使用无痛、使用评分函数甚至更经典的查询类型。
使用Should
使用 Boolean query type,你有多个子句。
- 必须
- 过滤器
- Must_not
- 应该
Should
允许 for optionals clause 计入最终得分。
所以你选择:
GET _search
{
"query": {
"bool": {
"should": [
{
"range": {
"news_from_date": {
"gte": "now"
}
}
},
{
"range": {
"news_to_date": {
"lte": "now"
}
}
}
]
}
}
}
请注意:
You can use the minimum_should_match parameter to specify the number or percentage of should clauses returned documents must match.
If the bool query includes at least one should clause and no must or filter clauses, the default value is 1. Otherwise, the default value is 0.
使用脚本
如 the documentation 所提供,您可以创建一个自定义函数,根据您自己的业务规则对您的文档进行评分。
脚本使用 Painless(java 的精简版)
GET /_search
{
"query": {
"function_score": {
"query": {
"match": { "message": "elasticsearch" }
},
"script_score": {
"script": {
"source": "Math.log(2 + doc['my-int'].value)"
}
}
}
}
}