Elasticsearch использует Char Filter в Analyzer, чтобы удалить все символы после "?" - PullRequest
0 голосов
/ 21 октября 2018

В эластичном поиске я пытаюсь использовать анализатор для поля, который будет использовать фильтр для замены всех символов после символа?встречается в пустое пространство.Для этого я использую следующий фильтр:

"filter_name":{
  "type": "pattern_replace",
  "pattern": "\\?(.*)",
  "replacement": ""
}

Но это работает не так, как ожидалось.Я что-то упускаю?

Ответы [ 2 ]

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

Пожалуйста, смотрите ниже.Я создал образец сопоставления и пример запроса _analyze, чтобы увидеть, как создаются токены.

Отображение

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "char_filter": [
            "my_char_filter"
          ]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "pattern_replace",
          "pattern": "(?=.*)\\?(.*)",
          "replacement": ""
        }
      }
    }
  }
}

Запрос

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "Do you know? Life is crazy"
}

Результат анализа

{
  "tokens": [
    {
      "token": "Do",
      "start_offset": 0,
      "end_offset": 2,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "you",
      "start_offset": 3,
      "end_offset": 6,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "know",
      "start_offset": 7,
      "end_offset": 26,
      "type": "<ALPHANUM>",
      "position": 2
    }
  ]
}

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

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

Шаблон использования: "(?<=\\?)(.*)" и замена: ""

...