Получение точного совпадения со строкой `# deprecated` в Kibana / ELK - PullRequest
0 голосов
/ 31 октября 2018

Я использую Kibana, чтобы найти все журналы, содержащие точное совпадение строки #deprecated.

enter image description here

По причине, которую я не понимаю, она сопоставляет строку со словом "deprecated" без знака #.

Я пытался использовать экранирование для # в соответствии с Документация Lucene . т.е. message:"\\#deprecated" - без изменения результатов.

  • Как запросить точное совпадение #deprecated только точное совпадение текста
  • Почему это происходит?

1 Ответ

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

Ваша проблема не связана с синтаксисом запроса, а для этого нужен экранирование, а с анализом. Ваш анализатор удаляет пунктуацию, потому что он анализирует ее как полный текст. Он удаляет #, почти так же, как удаляет точки и запятые.

Таким образом, после анализа (при условии стандартного анализа) чего-то вроде: «Class is #deprecated» генерируемый поток токенов будет иметь следующие токены: «class», «deprecated» («is» - это стоп-слово). Индексированные формы «#deprecated» и «deprecated» идентичны, поэтому невозможно иметь запрос, который может различать их, так как он в настоящее время индексируется.

Чтобы это исправить, вам придется изменить анализатор . WhitespaceAnalyzer может быть хорошим выбором, и должен решить эту проблему. Однако будьте осторожны, вы не приносите больше вреда, чем пользы. Если вы используете WhitespaceAnalyzer, вам также придется бороться с другой пунктуацией и поиском «предложения» не нашел бы «совпадение в конце этого предложения» из-за периода. Так что, если вы ищете полный текст, это, безусловно, вызовет гораздо больше проблем, чем решит.

Если вы хотите знать полные правила стандартного анализа, кстати, это реализация UAX # 29 границ слова

...