我正在使用ElasticsearchRepository,我想搜索一些关键字。我想要查询的是;
//Get all results which contains at least one of these keywords
public List<Student> searchInBody(List<String> keywords);
我已经为单个关键字创建了一个查询,它可以运行,但我不知道如何为多个关键字创建查询。有没有办法做到这一点?
@Repository
public interface StudentRepository extends
ElasticsearchRepository<Student, String> {
public List<Student> findByNameOrderByCreateDate(String name);
@Query("{\"query\" : {\"match\" : {\"_all\" : \"?0\"}}}")
List<ParsedContent> searchInBody(String keyword);
}
答案 0 :(得分:3)
是的,您可以在String
中传递ElasticsearchRepository
对象的数组。
Elasticsearch为此提供了terms query。
还必须使用JSONArray
而不是List<String>
,即必须将List<String>
转换为JsonArray
。 (原因:下面提供了检查弹性查询的语法)
这是在代码中使用它的方式:
@Query("{\"bool\": {\"must\": {\"terms\": {\"your_field_name\":?0}}}}")
List<ParsedContent> searchInBody(JSONArray keyword);
结果将包含关键字数组中提供的至少一个关键字的对象。
以下是您可以在kibana控制台或终端中使用的上述Java代码的rest请求表示形式:
GET your_index_name/_search
{
"query" : {
"bool": {
"must": {
"terms": {
"your_field_name":["keyword_1", "keyword_2"]
}
}
}
}
}
注意:有关更多选项,您可以选中terms-set-query