如何使用Spring Data Elasticsearch搜索关键字列表?

时间:2017-09-25 11:30:20

标签: spring-data spring-data-elasticsearch

我正在使用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);

}

1 个答案:

答案 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