ElasticSearch Игнорирование слов, имеющих одну букву - PullRequest
0 голосов
/ 01 июня 2018

Я новичок в ElasticSearch, у меня есть приложение, которое используетasticSearch для поиска ингредиентов в данном продукте или фрукте ... У меня проблема с подсчетом очков, если пользователь, например, записывает на пленку: "Vitamine d" ElasticSearchдаст фразу "vitamine", которая имеет лучший результат, даже если фраза "Vitamine D" существует, и обычно она должна иметь самый высокий балл.Я вижу, что если второе слово "d" в моем случае - всего одна буква, то упругий поиск его игнорирует.

Я сделал еще один пример: "vitamine b12", и у меня был правильный счет.

Вот запрос, который приложение отправляет на сервер:

{
  "from": 0,
  "size": 5,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "constNomFr": {
              "query": "vitamine d"
            }
          }
        }
      ],
      "should": [
        {
          "prefix": {
            "constNomFr": {
              "value": "vitamine d",
              "boost": 2
            }
          }
        }
      ]
    }
  },
  "_source": {
    "excludes": [
      "alimentDtos"
    ]
  }
}

Что можно изменить, чтобы оно работало?

Большое спасибо.

1 Ответ

0 голосов
/ 04 июня 2018

Если вы можете идентифицировать свои ингредиенты, я рекомендую вам проиндексировать их в отдельном поле «ингредиенты», задав для него тип keyword.Таким образом, вы можете использовать фильтр терминов и даже выполнять агрегации.

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

Если у вас нет ингредиентов, внесенных в указатель в виде массива, вам следует взглянуть на эластичный поиск анализаторы , чтобы выбрать или построить правильный.

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