ElasticSearch: как можно сортировать совпадения по месту нахождения в поле - PullRequest
0 голосов
/ 07 марта 2019

Пример: у нас есть три документа:

doc1 {
 "field1": "xxxyyyzzz"
}

doc2 {
   "field1": "yyyxxxzzz" 
}

doc3 {
   "field1": "yyyzzzxxx"
}

При поиске "xxx" результат поиска должен быть: doc1, doc2, doc3 в этом порядке.

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете использовать запрос префикса и шаблонный запрос в сочетании с отрицательной оценкой, если в конце найден термин соответствия.Это использует анализатор по умолчанию.Обратите внимание, что это убийца производительности.

POST /test_index/test/_search
{
    "query": {
        "bool": {
            "should": [
               {
                "prefix": {
                  "field1": {
                     "value": "xxx",
                     "boost": 15
                  }
                }
               },
               {
               "wildcard": {
                   "field1": {
                      "value": "*xxx*", 
                      "boost": 10
                   }
                }
               },
               {
                   "wildcard": {
                   "field1": {
                      "value": "*xxx", 
                      "boost": -5
                   }
                }
               }
            ]
        }
    }
}

Надеюсь, это поможет!

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