Как расставить приоритеты совпадений в начале строк в Elasticsearch? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть экземпляр Elasticsearch, полный документов, содержащих названия фильмов и серий.

Когда я запускаю это:

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "fields": [
              "Name^2",
              "SeriesName^1.5",
              "Description"
            ],
            "fuzziness": "AUTO",
            "prefix_length": 2,
            "query": "game"
          }
        }
      ]
    }
  }
}

... я получаю названия, такие как "Большая игра", "Голодные игры", "Военные игры" и т. Д.

Тем не менее, я хотел бы получить названия, начинающиеся с «game», ДО ТОГО, как заголовки просто содержат «game».

Когда пользователь ищет «game», он ожидает такие названия, как «Game of Thrones» и «Change game».", перед" Имитацией игры ".

Как я могу сделать это более точным ?Спасибо!

1 Ответ

1 голос
/ 19 июня 2019

Попробуйте что-то вроде ниже:

{ "query": {
    "prefix" : { "Name" : "game" }
  }
}

Пожалуйста, обратитесь к документации для того же Документация Elasticsearch

Для этого ваше поле / свойство должно быть маркировано как ключевое слово , см. Запрос ниже. Также можно добавить дополнительный строчный фильтр в отображение для вашего поля / свойства.

{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "analyzer_startswith": {
                        "tokenizer": "keyword",
                        "filter": "lowercase"
                    }
                }
            }
        }
    },
    "mappings": {
        "test_index": {
            "properties": {
                "Name": {
                    "search_analyzer": "analyzer_startswith",
                    "index_analyzer": "analyzer_startswith",
                    "type": "string"
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...