使用spring搜索和获取对象

lnxxn5zx  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(370)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

四天前关门了。
改进这个问题
我在spring(v.5.3)项目中配置了elasticsearch,现在我想得到这个查询的结果(所有书籍的列表):

GET books/_search
{
    "query": {
      "multi_match": {
        "fields": ["Author", "Blurb"], 
        "query": "harry"
      }
    },
    "size": 10
}

怎么做?

xytpbqjk

xytpbqjk1#

当您想在多个字段中搜索时,可以使用 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);

在这里,我们搜索“作者”和“模糊”字段以查找匹配项。
首先要定义一个“book实体:

@Document(indexName = "book")
public class Book {

    @Id
    private Long id;

    @Field(type = FieldType.Text)
    private String author;

    @Field(type = FieldType.Text)
    private String blurb;

    // getter/setter ...
}

第二件事是定义一个自定义存储库,该存储库描述您需要的方法:

interface BookCustomRepository {
    SearchPage<Book> findAllByAuthorAndBlurb(String query, Pageable pageable);
}

然后,我们改变 BookRepository 要扩展此新的自定义接口,请执行以下操作:

public interface BookRepository extends ElasticsearchRepository<Book, Long>, BookCustomRepository {}

现在,我们需要在一个名为 BookCustomRepositoryImpl (此名称必须与添加了实现的接口相同!):

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

相关问题