Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring搜索和获取对象_Java_Spring_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,Spring,elasticsearch" /> elasticsearch,Java,Spring,elasticsearch" />

Java 使用Spring搜索和获取对象

Java 使用Spring搜索和获取对象,java,spring,elasticsearch,Java,Spring,elasticsearch,我在Spring(v.5.3)项目中配置了ElasticSearch,现在我想得到这个查询的结果(所有书籍的列表): GET books/_search { "query": { "multi_match": { "fields": ["Author", "Blurb"], "query": "harry"

我在Spring(v.5.3)项目中配置了ElasticSearch,现在我想得到这个查询的结果(所有书籍的列表):

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);
        }
    }