Spring Data находит подстроку, содержащую специальные символы - PullRequest
0 голосов
/ 08 июня 2018

Как получить данные изasticsearch, содержащие специальные символы, такие как ./ - ... используя данные пружины?

У меня есть документ, определенный следующим образом:

@Document(indexName = "audit-2018.135", type = "audit")
public class Trace {

    @Id
    private String id;

    @Field(type = FieldType.Text)
    private String uri;

    // setters & getters
}

Мне нужно получить данные изasticSearch по полю uri .

Вот пример того, как выглядят данные:

martin-int-vip.vs.cz: 5080 / kib / api / runtime / case / CASE0000000000324223

При использовании kibana я могу использовать:

uri: "martin-int-vip.vs.cz:5080/kib"

, и я получаю обратнозапись выше, которая содержит искомую подстроку.

Теперь мне нужно добиться того же с помощью Java, однако в весенних данных он не работает должным образом.

У меня есть эластичный репозиторий эластичности, подобный этому:

public interface TraceRepository extends ElasticsearchRepository<Trace, String> {    
    List<Trace> findByUriContaining(String uri);
}

когда я вызываю метод findByUriContained с параметром uri как:

martin-int-vip.vs.cz: 5080 \ / kib

или даже это

martin-int

Я получаю 0 результатов.Когда я отправляю «kib» в качестве параметра, он корректно возвращает все записи, содержащие слово «kib», однако он не работает с такими специальными символами, как./ - и т. д. Как мне запросить мойasticSearch из Java, чтобы получить все записи, которые содержат желаемую подстроку?Спасибо

1 Ответ

0 голосов
/ 09 июня 2018

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

Для запроса полей такого типа вам необходимо изменитьповедение анализатора или вы можете использовать asticSearchTemplate и критерии для создания более гибких запросов.

...