Поиск Elasticsearch поиск по словам, а затем упорядочить по дате для каждого свойства индекса - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужен один запрос, который даст мне результаты, такие как:

--------------------------------------------------------------------------
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"
       },

Это вообще возможно? У вас есть предложение / пример, которым вы можете поделиться?

1 Ответ

0 голосов
/ 27 сентября 2018

Поскольку я не мог заставить decay работать как нужно, и других решений не было. Я сделал прокси-сервер. Это переписывает запрос между моим приложением и упругой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...