Я пытаюсь выяснить, как повысить релевантность результатов поиска на основе последнего проиндексированного времени. Итак, если для поискового запроса есть несколько совпадений, мне нужно повысить результаты на основе последней проиндексированной временной метки документа.
Я попытался следовать документации здесь , ипопытался выполнить несколько запросов, но не уверен, как передать имя поля и его значение.
GET code_sourcenodedupefilecontractv4_1421_shared_5dd3788f-2d0a-4a49-b679-98bbf519013e/_search
{
"query": {
"function_score": {
"query": {
"match": {
"originalContent": "sample"
}
},
"functions": [
{
"linear": {
"indexedTimeStamp": {
"scale": "30d",
"decay": 0.5
}
}
}
]
}
}
}
При выполнении вышеуказанного запроса в kibana я получаю следующее сообщение:
"failed_shards": [
{
"shard": 0,
"index": "code_sourcenodedupefilecontractv4_1421_shared_5dd3788f-2d0a-4a49-b679-98bbf519013e",
"node": "UX5mwT1sT_a2QuqeFG-JUw",
"reason": {
"type": "query_shard_exception",
"reason": "failed to create query: {\n \"function_score\" : {\n \"query\" : {\n \"match\" : {\n \"originalContent\" : {\n \"query\" : \"sample\",\n \"operator\" : \"OR\",\n \"prefix_length\" : 0,\n \"max_expansions\" : 50,\n \"fuzzy_transpositions\" : true,\n \"lenient\" : false,\n \"zero_terms_query\" : \"NONE\",\n \"auto_generate_synonyms_phrase_query\" : true,\n \"boost\" : 1.0\n }\n }\n },\n \"functions\" : [\n {\n \"filter\" : {\n \"match_all\" : {\n \"boost\" : 1.0\n }\n },\n \"linear\" : {\n \"indexedTimeStamp\" : {\n \"scale\" : \"30d\",\n \"decay\" : 0.5\n },\n \"multi_value_mode\" : \"MIN\"\n }\n }\n ],\n \"score_mode\" : \"multiply\",\n \"max_boost\" : 3.4028235E38,\n \"boost\" : 1.0\n }\n}",
"index_uuid": "U6os7SW0QuqOuuS3sASCrg",
"index": "code_sourcenodedupefilecontractv4_1421_shared_5dd3788f-2d0a-4a49-b679-98bbf519013e",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Can't load fielddata on [indexedTimeStamp] because fielddata is unsupported on fields of type [date]. Use doc values instead."
}
}
}
]"
Значение поля (indexedTimeStamp), сохраненного в упругом поиске:
"indexedTimeStamp": {
"type": "date",
"store": true,
"doc_values": false,
"format": "epoch_second"
},
Я что-то здесь упустил?
[EDIT]: Если doc_value
равен false
, то мы не можем сортировать или агрегировать по этому полю. Это ограничение со стороны упругого поиска. Я попытался создать новый индекс с doc_value
как true
, и он работал как ожидалось.