RegEx для сопоставления любых 2 букв + любые 6 цифр в люцене - PullRequest
0 голосов
/ 03 мая 2019

Я пишу фильтр исключения для агрегирования важных терминов в Elastic Search. Я хочу исключить из результатов любые термины, соответствующие шаблону (любые 2 буквы) (любые 6 цифр), т.е. AB123456

Я пытался:

[a-zA-Z]{2}&<0-9>{6}

но Kibana выдает ошибку при попытке обновить визуализацию

[x_content_parse_exception] [1:72] [significant_terms] exclude doesn't support values of type: START_OBJECT

Этот JavaScript, кажется, делает то, что я хочу:

([a-zA-Z]{2}\d{6})

но я изо всех сил пытаюсь перевести это на Lucene

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вот полный JSON, который я использовал, чтобы получить желаемый результат.Я использую агрегатор значимых терминов, чтобы извлекать ключевые слова из заметок в тикетах поддержки.Мне нужно было установить background_filter, а затем исключить текстовый шаблон из моего исходного вопроса.

Структура документа:

Сводка: Имя сообщения об ошибке

Примечания: Подробная информация оошибка, включая имена пользователей, такие как AB123456, которые меня не волнуют.

"significant_terms": {
        "field": "notes",
        "size": 10,
        "background_filter": {
          "query_string": {
            "query": "summary: ErrorMessage1* OR ErrorMessage2*",
            "analyze_wildcard": "true"
          }
        },
        "exclude": "[a-zA-Z]{2}[0-9]{6}"
      }
1 голос
/ 03 мая 2019

Здесь вам не нужно "&", он пытается найти токенов , которые соответствуют одновременно [az] {2} и <0-9> {2}, а не один за другим.

Вот решение, основанное на моем понимании проблемы. Это исключит документы, содержащие 2 буквы, за которыми следуют 6 цифр:

PUT /stackoverflowtest/_doc/1
{
    "value" : "AB123456"
}

PUT /stackoverflowtest/_doc/2
{
    "value" : "AB1234Z"
}

PUT /stackoverflowtest/_doc/3
{
    "value" : "This document has one at the end: AB123456"
}

POST /stackoverflowtest/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "regexp": {
            "value": "[a-z]{2}<0-9>{6}"
          }
        }
      ]
    }
  }
}

Возвращает только один документ со значением «AB1234Z», в котором нет 2 букв, за которыми следуют 6 цифр для любого токена.

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