Я использую Scala 2.12 для запроса ElasticSearch (6.5).
Я могу использовать построители запросов для поиска по одному полю, как показано ниже:
val searchSourceBuilder = new SearchSourceBuilder()
val qb = new BoolQueryBuilder()
.must(QueryBuilders.regexpQuery("header.fieldname", "01_.+_20190711_data"))
searchSourceBuilder.query(qb)
Используя вышеупомянутое (Iнужен поиск по регулярному выражению) Я могу искать соответствующие документы.
Однако у меня есть более сложное требование, в котором я должен сопоставить документы по нескольким парам поле-значение.
, т. е.
header.fieldname должен совпадать с шаблоном "01 _. + data" И заголовок.fieldname2 должен совпадать с шаблоном "type . + _ 2019-07-11"
По сути, это похоже наПредложение SQL где для 2 или более столбцов (и строки значений).
Я проверял https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html
Но это похоже на поиск одной и той же строки (значения) в нескольких полях.Это НЕ то, что я хочу.Я в основном хочу что-то вроде SQL AND в предложении where (лучше, если это тоже с regex).
UPDATE:
Обратите внимание на приведенный ниже ответ @Meet Rathod worksи принято.
Однако, чтобы продвинуться вперед, поэтому, если мне нужно еще одно условие, которое является SQL ИЛИ, мой код ниже верен.Требуется:
header.fieldname: 01_.+data AND header.fieldname2: type.+_2019-07-11 AND (header.fieldname3: some_thing OR header.fieldname3: some_other_thing)
Код:
val qb = new BoolQueryBuilder()
.must(QueryBuilders.regexpQuery("header.fieldname", "01_.+_20190711_data"))
.must(QueryBuilders.regexpQuery("header.fieldname2", "type.+_2019-07-11"))
.should(QueryBuilders.regexpQuery("header.fieldname3", "some_thing"))
.should(QueryBuilders.regexpQuery("header.fieldname3", "some_other_thing"))
Это правильно, или я что-то упустил?