在Elasticsearch 6.8中,我有以下文档:
{
...
item: 'AAA',
...
},
{
...
item: 'BBB',
...
},
{
...
item: 'CCC',
...
}
在查询请求中,item
字段有一个过滤器,如下所示。
"query": {
"bool": {
"filter": [
{
"terms": {
"item": [
"BBB", "CCC"
]
}
}
],
"should": [
{
"match": {
"name": "Mike"
}
}
],
"minimum_should_match": 1
}
我想要的是根据请求数组中的项目顺序对匹配的文档进行排序。以上面的示例为例,它过滤在BBB
字段中有CCC
或item
的文档。我希望看到BBB
的文档比CCC
的文档得分更高,因为用户在查询请求中将BBB
放在CCC
之前。如何在Elasticsearch中实现这一目标?
答案 0 :(得分:0)
要根据创建日期获得评分,您需要向每个文档添加create_timestamp。 (您可以使用管道来实现。例如:https://discuss.elastic.co/t/creation-and-update-timestamps-for-each-doc/93456/2)
一旦有了create_timestamp,就可以使用相同的结果对结果进行排序。方法如下:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html
要使用create_timestamp重新标记文档,可以在日期上使用带有“ field_value_factor”的“ function_score”。 下面是一个示例:https://github.com/elastic/elasticsearch/issues/11872