Как получить данные из elasticsearch, содержащие специальные символы, такие как . / - ..., используя данные Spring?
У меня есть документ, определенный следующим образом:
@Document(indexName = "audit-2018.135", type = "audit")
public class Trace {
@Id
private String id;
@Field(type = FieldType.Text)
private String uri;
// setters & getters
}
Мне нужно получить данные из elasticSearch по полю ури.
Вот пример того, как выглядят данные:
martin-int-vip.vs.cz:5080/kib/api/runtime/case/CASE0000000000324223
При использовании кибаны я могу использовать:
uri: "martin-int-vip.vs.cz:5080/kib"
и я возвращаю запись выше, которая содержит желаемую подстроку.
Теперь мне нужно добиться того же от java, однако в весенних данных он работает не так, как ожидалось.
У меня есть elasticSearchRepository, определенный следующим образом:
public interface TraceRepository extends ElasticsearchRepository<Trace, String> {
List<Trace> findByUriContaining(String uri);
}
когда я вызываю метод findByUriConpting с параметром ури как:
martin-int-vip.vs.cz:5080/kib
или даже это
martin-int
Я возвращаю 0 результатов. Когда я отправляю «kib» в качестве параметра, он правильно возвращает все записи, содержащие слово «kib», однако он не работает со специальными символами, такими как. / - и т. д. Как мне запросить свой elasticSearch из java, чтобы получить все записи, которые содержат мою желаемую подстроку? Спасибо
Я обнаружил, что по умолчанию анализатор elasticSearch токенизирует ваш запрос. Вместо «martin-int-vip.vs.cz:5080/kib» он ищет поле, содержащее martin, int и vip ...
Чтобы запрашивать такие поля, вам необходимо изменить поведение анализатора или вы можете использовать elasticSearchTemplate и Criteria для построения более гибких запросов.