Какой анализатор может удовлетворить мою потребность в эластичном поиске? - PullRequest
0 голосов
/ 27 октября 2018

В моей ситуации мое поле похоже на «abc, 123», я хочу, чтобы его можно было найти либо «abc», либо «123».мое отображение индекса похоже на код ниже

{
"myfield": {
   "type": "text",
   "analyzer": "stop",
   "search_analyzer": "stop"                }

Но когда я использую API es _analyzer для тестирования, я получаю результат

{
    "tokens": [
        {
            "token": "abc",
            "start_offset": 0,
            "end_offset": 3,
            "type": "word",
            "position": 0
        }
    ]
}

"123"был потерян.Если я хочу соответствовать своей ситуации, мне нужно выбрать какой-нибудь другой анализатор или просто добавить некоторые специальные настройки?

1 Ответ

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

Вам нужно выбрать standard анализатор вместо stop анализатор разбивает текст на термины всякий раз, когда встречает символ, который не является буквой, и удаляет стоп-слова, такие как «the».В вашем случае «abc, 123» приводит к выводу токена abc при использовании анализатора остановки.Используя стандартный анализатор, он возвращает abc и 123, как показано ниже

POST _analyze
{
  "analyzer": "standard",
  "text": "abc, 123"
}

Вывод:

{
  "tokens": [
    {
      "token": "abc",
      "start_offset": 0,
      "end_offset": 3,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "123",
      "start_offset": 5,
      "end_offset": 8,
      "type": "<NUM>",
      "position": 1
    }
  ]
}

EDIT1 Использование простого токенайзера с разделением по шаблонам

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "simple_pattern_split",
          "pattern": ","
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "abc,123"
}

Вывод:

{
  "tokens": [
    {
      "token": "abc",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word",
      "position": 0
    },
    {
      "token": "123",
      "start_offset": 4,
      "end_offset": 7,
      "type": "word",
      "position": 1
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...