Эластичный поиск, поиск любой фразы из набора фраз
Я заполняю набор этими значениями:
set.add("hey michael");
set.add("hey john");
Затем индексируйте два сообщения:
mes.add("hey john how are you?");
mes.add("hey michael how are you?");
for(int i=0;i<mes.size();i++)
{
test.put("tag",mes.get(i));
client.prepareIndex("test", "test",String.valueOf((i+1))).setSource(test).execute().actionGet();
}
Что я хочу, чтобы найти сообщения, которые содержат одну из фраз в наборе. То есть в этом примере оба сообщения соответствуют критериям
Пока что я попробовал запрос на совпадение:
MatchQueryBuilder q = QueryBuilders.matchQuery("tag",set).operator(MatchQueryBuilder.Operator.OR);
System.out.println(q.toString());
который выглядит так:
{"match": {"tag": {"query": ["hey john", "hey michael"], "type": "boolean", "operator": "OR"}}}
и условия запроса:
.setQuery(QueryBuilders.termsQuery("tag",set))
без удачи - он возвращает 0 хитов
Какой запрос я должен использовать? пример будет очень полезным