关于#java#的问题:通过该对象的getSearchHits方法可以获取到查询到的文档,返回list为空,但是我查询的时第1页长度为10" alt="img" align="left">

img

img

        NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if (searchBean.getSearchKey() != null && !"".equals(searchBean.getSearchKey())) {
            if (searchBean.getBoolMatchFlag()) {
                String newKey = searchBean.getSearchKey().replace(",", " ");
                MatchQueryBuilder boolMatch = QueryBuilders.matchQuery("all", newKey).operator(Operator.OR);
                boolQueryBuilder.filter(boolMatch);
            } else if (searchBean.getTermsSearchFlag()) {
                TermQueryBuilder term = QueryBuilders.termQuery("all", searchBean.getSearchKey());
                boolQueryBuilder.filter(term);
            } else {
                boolQueryBuilder.filter(QueryBuilders.matchAllQuery());
            }
        }
        if (searchBean.getReleaseUserName() != null && !"".equals(searchBean.getReleaseUserName())) {
            boolQueryBuilder.filter(QueryBuilders.termQuery("user_name",searchBean.getReleaseUserName()));
        }
        if (searchBean.getReleaseTimeStart() != null && !"".equals(searchBean.getReleaseTimeStart())
                && searchBean.getReleaseTimeEnd() != null && !"".equals(searchBean.getReleaseTimeEnd()) ) {
            try {
                boolQueryBuilder.filter(QueryBuilders.rangeQuery("create_time")
                        .lte(simpleDateFormat.parse(searchBean.getReleaseTimeEnd()))
                        .gte(simpleDateFormat.parse(searchBean.getReleaseTimeStart()))
                );
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (searchBean.getFrom() != null && searchBean.getSize() != null) {
            searchQueryBuilder.withPageable(PageRequest.of(searchBean.getFrom(), searchBean.getSize()));
        } else {
            searchQueryBuilder.withPageable(PageRequest.of(1, 10));
        }
        if (searchBean.getResourceType() != null && !"".equals(searchBean.getResourceType())) {
            boolQueryBuilder.filter(QueryBuilders.termQuery("type", searchBean.getResourceType()));
        }
        NativeSearchQuery searchQuery = searchQueryBuilder.withQuery(boolQueryBuilder)
                .withHighlightBuilder(new HighlightBuilder().field("all").preTags("<font color='red'>").postTags("</font>"))
                .build();
        SearchHits<ExternalResourceDoc> search = elasticsearchRestTemplate.search(searchQuery, ExternalResourceDoc.class);

        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("total", search.getTotalHits());

        List<ExternalResourceDoc> resultList = new ArrayList<>();
      **  List<SearchHit<ExternalResourceDoc>> searchHits = search.getSearchHits();**
        System.out.println(searchHits);
      **  for (SearchHit<ExternalResourceDoc> searchHit : search.getSearchHits()) {**
            ExternalResourceDoc content = searchHit.getContent();
            String all = searchHit.getHighlightField("all").get(0);
            if (all != null && !"".equals(all)){
                System.out.println(all);
            }
            resultList.add(content);
            System.out.println(all);
        }
        resultMap.put("list", resultList);
        return resultMap;
    }

源于ChatGPT仅供参考:

根据您提供的代码,可能出现`search.getSearchHits()`返回空列表的原因有以下几种情况:

1. Elasticsearch 中没有匹配查询条件的文档。

    可以通过在控制台或者 Kibana 上执行相同的搜索操作来确认是否有符合条件的记录。可以尝试调整查询条件或者放宽限制来获取更多的结果。
    
2. 查询到的文档中并未包含“all”字段。

    在 `HighlightBuilder` 中指定高亮的字段需要与实际索引的字段名一致。如果使用的是其它名称,则需要在对应的字段上添加别名或者修改查询时的字段映射关系。

3. Elasticsearch 的高亮功能未正确配置或启用。

    您可以在 Elasticsearch 配置文件中检查 `highlight.enabled` 参数是否为 true。还可以使用 REST API 来验证:
    
    ```http
    GET /index/_settings?filter_path=*.highlight.enabled
    ```
    
    如果返回值中,`highlight.enabled` 为 false,则需要将其设置为 true4. `search.getSearchHits()` 返回 null 值。

    这种情况可能出现在 Elasticsearch 返回的响应或者底层连接出现问题时。您可以通过在 try-catch 语句中处理该异常,并记录日志来排除该问题。

总之,建议对代码进行一些调试,以确定具体是哪种情况导致了搜索结果为空。希望这些信息能够帮到您!