Java 使用Spring搜索和获取对象
我在Spring(v.5.3)项目中配置了ElasticSearch,现在我想得到这个查询的结果(所有书籍的列表):Java 使用Spring搜索和获取对象,java,spring,
elasticsearch,Java,Spring,
elasticsearch,我在Spring(v.5.3)项目中配置了ElasticSearch,现在我想得到这个查询的结果(所有书籍的列表): GET books/_search { "query": { "multi_match": { "fields": ["Author", "Blurb"], "query": "harry"
GET books/_search
{
"query": {
"multi_match": {
"fields": ["Author", "Blurb"],
"query": "harry"
}
},
"size": 10
}
如何做到这一点?当您想要在多个字段中搜索时,您可以使用
QueryBuilders#multiMatchQuery()
指定要匹配的所有字段:
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(multiMatchQuery("harry")
.field("author")
.field("blurb")
.withPageable(new PageRequest(0, 10)
.build();
SearchHits<Book> searchHits = elasticsearchOperations.search(query, Book.class);
return SearchHitSupport.searchPageFor(searchHits, pageable);
第二件事是定义一个描述所需方法的:
interface BookCustomRepository {
SearchPage<Book> findAllByAuthorAndBlurb(String query, Pageable pageable);
}
现在,我们需要在名为BookCustomRepositoryImpl
的类中提供一个实现(该类的命名必须与添加了实现的接口相同!):
公共类BookCustomRepositoryImpl实现BookCustomRepository{
私人最终ElasticsearchOperations ElasticsearchOperations;
public BookCustomRepositoryImpl(ElasticsearchOperations ElasticsearchOperations{
this.elasticsearchOperations=elasticsearchOperations;
}
@凌驾
公共搜索页面findAllByAuthorAndBlurb(字符串名,可分页){
NativeSearchQuery searchQuery=新的NativeSearchQueryBuilder()
.withQuery(多重匹配查询(“harry”)
.field(“作者”)
.field(“blurb”)
.withPageable(新页面请求(0,10))
.build();
SearchHits SearchHits=elasticsearchOperations.search(查询,Book.class);
返回SearchHitSupport.searchPageFor(searchHits,可分页);
}
}
interface BookCustomRepository {
SearchPage<Book> findAllByAuthorAndBlurb(String query, Pageable pageable);
}
public interface BookRepository extends ElasticsearchRepository<Book, Long>, BookCustomRepository {}
public class BookCustomRepositoryImpl implements BookCustomRepository {
private final ElasticsearchOperations elasticsearchOperations;
public BookCustomRepositoryImpl(ElasticsearchOperations elasticsearchOperations {
this.elasticsearchOperations = elasticsearchOperations;
}
@Override
public SearchPage<Book> findAllByAuthorAndBlurb(String firstName, Pageable pageable) {
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(multiMatchQuery("harry")
.field("author")
.field("blurb")
.withPageable(new PageRequest(0, 10))
.build();
SearchHits<Book> searchHits = elasticsearchOperations.search(query, Book.class);
return SearchHitSupport.searchPageFor(searchHits, pageable);
}
}