Построитель запросов Elasticsearch `IN`
Я пытаюсь повторить in
SQL-запрос в упругом поиске... что-то похожее на select * from products where id in ('123, '345');
У меня есть что-то вроде ниже -
Set<String> searchIds = new HashSet<String>();
searchIds.add("123");
searchIds.add("456");
response = client.prepareSearch("id_index")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.termsQuery("product_id", searchIds))
.setFrom(0).setSize(50).setExplain(false)
.execute().actionGet();
hits = response.getHits();
hits.forEach((h) -> {
h.getSource().entrySet().stream().forEach((e)->{
System.out.println(e.getKey()+" : "+String.valueOf(e.getValue()).replace("\n", "").replace("\t", ""));
});
});
System.out.println("Response : "+response.toString());
Ответ, который я получаю от последнего System.out.println
как следует,
Response : {
"took" : 14,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
Я точно знаю, что есть два продукта с идентификаторами продуктов 123
а также 345
как я смог их увидеть через кибану. Но приведенный выше код не возвращает хитов. Я реплицирую SQL IN
запрос в правильном направлении?