Spring Data находит подстроку, содержащую специальные символы

Как получить данные из 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, чтобы получить все записи, которые содержат мою желаемую подстроку? Спасибо

0
0
376
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обнаружил, что по умолчанию анализатор elasticSearch токенизирует ваш запрос. Вместо «martin-int-vip.vs.cz:5080/kib» он ищет поле, содержащее martin, int и vip ...

Чтобы запрашивать такие поля, вам необходимо изменить поведение анализатора или вы можете использовать elasticSearchTemplate и Criteria для построения более гибких запросов.

Другие вопросы по теме