代码之家  ›  专栏  ›  技术社区  ›  JvmSd121

使用spring数据弹性搜索搜索

  •  0
  • JvmSd121  · 技术社区  · 6 年前

    是否有人在使用spring data elasticsearch后成功地使用了search?

    我已将uid添加到我的排序中,@controller已将其正确放入我的可分页中。我打开了慢速查询日志并验证了如果我手动运行@repository生成的查询,我将得到以下响应:

        "sort": [
          1522270372773,
          "log#AWJuYn7SAKReCIGzMYda"
        ]
    

    我在pojo中添加了(由@repository返回的类):

     @JsonProperty("sort")
     String[] sort;
    

    排序总是返回为空。尝试了两种不同的方法,却不知道如何设置sort。有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   JvmSd121    6 年前

    我已经解决了这个问题,但发现了一些令人失望的细节。

    罪魁祸首在这里: https://github.com/spring-projects/spring-data-elasticsearch/blob/3.0.x/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java

    在mapResults方法中,代码从searchHit.sourceasstring()填充我的pojo。sourceasstring提供原始json的一个子集,它不包括排序数组,即。

       "sort": [
          1522270147602,
          "log#AWJuXxJ_AKReCIGzMYdV"
        ]
    

    访问修饰符(没有getter和final的私有)没有提供优雅的增强。最后,我复制了DefaultResultMapper并实现了一个类似于setPersistentEntityID的方法,该方法将sortValues设置到我的pojo中。此方法的impl如下:

    private <T> void setSearchSortValues(T result, Object[] sortValues, Class<T> clazz) {
    
        if(SortAware.class.isAssignableFrom(clazz)) {
            ((SortAware) result).setSortValues(sortValues);
        }
    
    }
    

    我的pojo实现了sortaware接口,我定义如下:

    public interface SortAware {
    
        public Object[] getSortValues();
    
        public void setSortValues(Object[] sortValues);
    
    }