Я пытаюсь загружать файлы (статьи с заголовком, телом и т. Д.) В ElasticSearch, используя Logstash и Kafka.
Файлы находятся в формате JSON (поля - заголовок, тело и т. Д.), А поле тела - в HTML.
Моя версия ElasticSearch - 5.1.2.
Я использую Java REST Client (TransportClient) для взаимодействия с ElasticSearch.
Как мне обработать исходные файлы, загруженные с помощью Logstash, в ElasticSearch, чтобы соответствующим образом заменить все теги и их атрибуты, и сохранить их обратно в том же индексе?
Q1) обработка содержимого HTML с использованием Java
Q2) Обработка загруженных файлов Logstash и хранение только обработанных файлов.
Я пытался использовать addCharFilter's AnalyzeRequest's html_strip, который, как я думал, является эквивалентом HtmlStripCharFilter (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-htmlstrip-charfilter.html),, но html_strip возвращает токены только с удаленными символами «<» и «>>, но не с тегами и атрибутами, в отличие от HTMLStripCharFilter.
Я прилагаю свой код для этого.
String text = "<p>tag<p>";
AnalyzeRequest analyzeRequest = (new AnalyzeRequest(indexName)).text(text).addCharFilter("html_strip");
List<AnalyzeResponse.AnalyzeToken> tokens = client.admin().indices().analyze(analyzeRequest).actionGet().getTokens();
String tmp = "";
for(AnalyzeResponse.AnalyzeToken token:tokens) {
tmp += token.getTerm() + " ";
}
System.out.println(tmp);
Выход:
Я ожидаю - «тег», но
Я получаю - "p tag p"
Я также сталкивался с PreBuiltCharFilters (также HtmlStripCharFilterFactory), но я не совсем уверен, как его использовать. И я не сталкивался с примерами кода для подобного варианта использования.
Так как мне поступить об этом?
Спасибо.