Как убрать пробелы между словами перед индексацией - PullRequest
1 голос
/ 24 октября 2019

Как убрать пробелы между словами перед индексацией?

Например: я хочу иметь возможность искать 0123 7784 9809 7893 при запросе "0123 7784 9809 7893", "0123778498097893" или "0123-7784-9809-7893 "

Моя идея состоит в том, чтобы удалить все пробелы и тире и объединить частичное в целую строку (0123 7784 9809 7893 до 0123778498097893) перед индексацией, а также добавить анализатор в запросчасть, чтобы найти желаемый результат.

Я пытался

"char_filter" : {
            "neglect_dash_and_space_filter" : {
              "type" : "mapping",
              "mappings" : [
                "- => ",
                "' ' => "
              ]
            }

Кажется, что удаляется только тире, но не пробелы. Проверено на заказ гонт, но все равно не работает. Добрый совет. Благодаря.

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете использовать шаблон замены фильтра

{
  "mappings": {
    "properties": {
      "field1": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "filter": {
        "whitespace_remove": {
          "type": "pattern_replace",
          "pattern": "[^0-9]", ---> it will replace anything other than digits
          "replacement": ""
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": [
            "whitespace_remove"
          ]
        }
      }
    }
  }
}

Вы можете использовать обозначение \ uXXXX для пробелов: EDIT1:

PUT index41
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "char_filter": [
            "my_char_filter"
          ]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "mapping",
          "mappings": [
            "\\u0020 => ",
            "- => "
          ]
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...