Существует несколько документов, содержащих около 100 полей каждый. Я хотел бы выполнить следующий поиск через elasticsearch Java API 5.x:Elasticsearch запрос нескольких условий с использованием java api
Есть 3 поля я хотел бы использовать для этого поиска т.е.
department
job
name
Я хотел бы искать возвращение документы, соответствующие поля, как "отдел: D1", "отдел: D2", "работа: J1", "работа: J2", "имя: N1"
Я пытался сделать это таким образом
String[] departments = ["d1","d2","d3"];
String[] jobs = ["j1","j2","j3"];
String[] names = ["n1"];
MultiSearchRequestBuilder requestbuilder;
requestBuilder.add(client.prepareSearch().setQuery(QueryBuilders.termsQuery("department", departments)));
requestBuilder.add(client.prepareSearch().setQuery(QueryBuilders.termsQuery("job", jobs)));
requestBuilder.add(client.prepareSearch().setQuery(QueryBuilders.termsQuery("name", names)));
MultiSearchResponse response = requestBuilder.get();
Однако запросы выполняются как если бы каждый был индивидуальным запросом, то есть в этом примере, когда j3 существует в d4, документ с d4 будет также сопоставлен
Как выполнить поиск, как я упомянул? Я пробовал много разных запросов, и ничего не работает, есть ли что-то, чего я не вижу?
, используя код, который вы указали. Я не получаю результатов вообще, даже пытался сузить его только для фильтрации по отделам, но все же список хитов пуст. если ваш код правильный, то знаете ли вы, что может быть причиной? – Zerg
Анализируются ваши поля или нет? термин запрос является точным совпадением, поэтому ваши условия должны быть точно такими же, как индексы, которые были проиндексированы в полях, которые вы пытаетесь сопоставить – Val
Мне пришлось использовать .setSize() в ответ, и это было не в том месте цепи. он работает сейчас. – Zerg