【问题标题】:Spring Data Elastic Search @Query @HighlightSpring Data 弹性搜索 @Query @Highlight
【发布时间】:2020-08-18 05:56:46
【问题描述】:

我无法使用此查询代码获得突出显示的字段,对此有任何想法,我正在使用 SDE4.0.0.RC2,我想用@Query:

@Query("{\n" +
           "  \"multi_match\": {\n" +
           "    \"query\": \"?0\",\n" +
           "    \"fields\": [\n" +
           "      \"code^2\",\n" +
           "      \"name\"\n" +
           "    ],\n" +
           "    \"analyzer\": \"standard\"\n" +
           "  }\n" +
           "}")
   @Highlight(
           fields = @HighlightField(
                   name = "['code','name']"),
           parameters = @HighlightParameters(
                   preTags = "<strong>",
                   postTags = "</strong>",
                   fragmentSize = 500,
                   numberOfFragments = 3
           )
   )
   List<CodeNames> findAllByCodeAndNameOrderByName(String code, Pageable pageable);

【问题讨论】:

    标签: elasticsearch spring-data elastic-stack spring-data-elasticsearch


    【解决方案1】:

    您需要在单独的注释参数中指定每个突出显示字段:

       @Query("{\n" +
                "  \"multi_match\": {\n" +
                "    \"query\": \"?0\",\n" +
                "    \"fields\": [\n" +
                "      \"code^2\",\n" +
                "      \"name\"\n" +
                "    ],\n" +
                "    \"analyzer\": \"standard\"\n" +
                "  }\n" +
                "}")
        @Highlight(
            fields = {
                @HighlightField(name = "code"),
                @HighlightField(name = "name")
            },
            parameters = @HighlightParameters(
                preTags = "<strong>",
                postTags = "</strong>",
                fragmentSize = 500,
                numberOfFragments = 3
            )
        )
        List<CodeNames> findAllByCodeAndNameOrderByName(String code, Pageable pageable);
    

    编辑:

    除此之外,您还必须更改方法的返回类型:

    List<SearchHit<CodeNames>> findAllByCodeAndNameOrderByName(String code, Pageable pageable);
    

    SearchHits<CodeNames> findAllByCodeAndNameOrderByName(String code, Pageable pageable);
    

    要能够从返回的SearchHit 中读取突出显示值,请参阅https://docs.spring.io/spring-data/elasticsearch/docs/4.0.0.RC2/reference/html/#elasticsearch.operations.searchresulttypes

    【讨论】:

    • 谢谢!我如何将突出显示的值放入 Document 对象 CodeNames,这是我的 POJO:atDocument(indexName = "indextest", type = "_doc") public class CodeNames { atId private String id;私有字符串代码;私有字符串名称;私有字符串突出显示; public String getHighlight() { 返回高亮; } public void setHighlight(String highlight) { this.highlight = highlight; } ...
    • 由于 RC2 依赖于 Spring boot 2.3,我可能不会使用 RC2。我正在使用 Spring boot 2.2.6 如何在 @Query 中添加查询级别子查询,我可以在不使用高亮注释的情况下获取高亮字段值吗,例如:我可以使用类似 @Query("{\"multi_match\ ":{\"query\":\"?0\",\"fields\":[\"code^2\",\"name\"],\"analyzer\":\"standard\"} },{\"highlight\":{\"type\":\"plain\",\"fields\":{\"*\":{}}}}")
    • Spring Boot 2.3 将于下周四发布。 SDE 4.0 应该会在周二发布。您不能向@Query 添加突出显示,您需要在程序代码中构造一个NativeSearchQuery。您需要使用 ResultsExtractor 对整个响应进行自定义解析
    • 我正在测试 sde 4。它确实在 List> 的结果中给出了高亮字段,但它也带有分数、排序值等,我怎么能只有突出显示字段而不是其他搜索值,无需编写 java 值对象。
    • 您会得到一个SearchHit 对象,其中包含实体和其他信息。 SearchHit 中的附加信息有什么问题?
    猜你喜欢
    • 2018-06-08
    • 2017-07-16
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2014-11-04
    • 2019-12-12
    • 2022-01-02
    相关资源
    最近更新 更多