我在ElasticSearch索引中有以下文档(至少1 000 000):
{"title":"toto", "views":132, "likes":23, "date" : "2014-09-01..." ...}
使用lang分析器对title进行索引时,views和likes字段是0到无穷大的整数,日期是..date字段。
我希望按标题进行搜索,如果文档是最近的并且具有很高的观看次数,则会提升文档。
我正在使用衰减过滤器函数作为日期(从今天起作为原点),它按预期工作,但我不知道如何增强视图和喜欢字段,因为我没有最大起源。
这是我的搜索查询:
POST /threads/_search
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "air france",
"type": "phrase",
"fields": [
"title^4",
"desc"
]
}
},
"functions": [
{
"exp": {
"date": {
"origin": "2014/09/29 13:00:00",
"scale": "12h",
"offset":"6h",
"decay":0.5
}
}
}
]
}
}
}
答案 0 :(得分:1)
您可以按照文档中的this section尝试" field_value_factor"。而且您需要测试和评估结果,修改"因素"和你给予的提升" title"然后再次测试,看看它是否越来越接近你需要的东西了。此外,您可以使用search=explain
查看ES如何计算_score。像这样:
POST /threads/_search?explain
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "air france",
"type": "phrase",
"fields": [
"title^8",
"desc"
]
}
},
"functions": [
{
"exp": {
"date": {
"origin": "2014/09/29 13:00:00",
"scale": "12h",
"offset":"6h",
"decay":0.5
}
}
},
{
"field_value_factor": {
"field": "views",
"modifier": "log2p",
"factor": 0.1
}
},
{
"field_value_factor": {
"field": "likes",
"modifier": "log2p",
"factor": 0.1
}
}
]
}
}
}