Мне нужен один запрос, который даст мне результаты, такие как:
--------------------------------------------------------------------------
Has word/words in keywords -> xx.xx.2018 (newest date)
. . .
Has word/words in keywords -> xx.xx.1900 (oldest date)
--------------------------------------------------------------------------
Has word/words in description -> xx.xx.2018 (newest date)
...
Has word/words in description -> xx.xx.1900 (oldest date)
--------------------------------------------------------------------------
Has word/words in title -> xx.xx.2018 (newest date)
...
Has word/words in title -> xx.xx.1900 (oldest date)
--------------------------------------------------------------------------
Я пробовал простую сортировку по дате с увеличением запроса по определенному индексу (ключевые слова, описание, заголовок). Не мог заставить это придерживаться. Потому что хиты упорядочены по дате, а затем по запросам.
Я нашел API для многопользовательского поиска , но я не могу его использовать.
Самое близкое, что у меня есть:
"query": {
"function_score":{
"functions": [
{
"gauss": {
"date_taken": {
"origin": 'now',
"scale": '182d',
"offset": '366d',
"decay": 0.9
}
}
},
{
"field_value_factor": {
"field": "date_taken" ,
"factor": 1.2,
"modifier": "sqrt",
}
}
],
"query": {
"dis_max": {
"queries": [
{ "match": { "keywords": {"query": text, "boost": 9999999999999999999999999} }},
{ "match": { "description": {"query": text, "boost": 999} }},
{ "match": { "title": text }},
],
"tie_breaker": 1
}
}
}
}
Использование затухания в дате, чтобы в основном получить порядок по дате, а затем использование повышения в запросах. Давать хиты лучше _score
.
"sort": [
{
"_score" : {
"order": "desc"
}
}
]
Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых случаях, когда у меня небольшое количество попаданий (50-100), порядок в порядке. В других случаях я теряю порядок по дате или теряю порядок по словам / словам. Например, удар без keywords
стоит перед другими.
Также у меня проблема с повторением слов. Пример:
"keywords": "TEST, something else, TEST"
Найдено index options docs
еще не пробовал.
Я использую эластичный поиск 2.3
Часть индекса:
"mappings": {
"image": {
"properties": {
"keywords": {
"type": "string",
"analyzer": "simple",
"boost": 12
},
"title": {
"type": "string",
"analyzer": "simple",
"boost": 11
},
"description": {
"type": "string",
"analyzer": "simple",
"boost": 10
},
"date_taken": {
"type": "date",
"format": "dd/MM/yyyy"
},
Это вообще возможно? У вас есть предложение / пример, которым вы можете поделиться?