多索引联合查询,修改其中一个索引的字段名后对查询结果顺序有影响

多索引联合查询,修改其中一个索引的字段名后对查询结果顺序有影响,请问是什么原因

我刚学ES,最近项目有一个综合搜索的功能需要实现,要查多个索引下的数据,分页返回查询结果。大致代码如下:


@Data
@Document(indexName = "index_a", type = "_doc")
public class IndexA extends BaseEsEntity implements Serializable {
    private Long id;
    private String name;
}

@Data
@Document(indexName = "index_b", type = "_doc")
public class IndexB extends BaseEsEntity implements Serializable {
    private Long id;
    private String title;
}

@Data
@Document(indexName = "index_c", type = "_doc")
public class IndexC implements Serializable {
    @Id
    private String id;
    private String title;
}

@Data
@Document(indexName = "index_d", type = "abc")
public class IndexD implements Serializable {
    @Id
    @Field(type = FieldType.Text)
    private String abcId;

    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String abcName;
}

//查询方法
public Object multipleSearch(MultipleSearchQuery query, Pageable pageable){
    QueryBuilder firstQuery = new BoolQueryBuilder()
                    .must(QueryBuilders.termQuery("_index", "index_a"))
                    .must(QueryBuilders.multiMatchQuery(query.getKeyword(),"name"));

    QueryBuilder secondQuery = new BoolQueryBuilder()
                    .must(QueryBuilders.termQuery("_index", "index_b"))
                    .must(QueryBuilders.multiMatchQuery(query.getKeyword(),"title"));

    QueryBuilder threeQuery = new BoolQueryBuilder()
                    .must(QueryBuilders.termQuery("_index", "index_c"))
                    .must(QueryBuilders.multiMatchQuery(query.getKeyword(),"title"));

    QueryBuilder fourQuery = new BoolQueryBuilder()
                    .must(QueryBuilders.termQuery("_index", "index_d"))
                    .must(QueryBuilders.multiMatchQuery(query.getKeyword(),"abcName"));

    QueryBuilder mainQuery = new BoolQueryBuilder()
                    .should(secondQuery).should(firstQuery)
                    .should(threeQuery).should(fourQuery)

     NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
     builder.withIndices("index_a", "index_b", "index_c","index_d")
                    .withTypes("abc", "_doc")
                    .withSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                    .withQuery(mainQuery)
                    .withHighlightFields(this.myResultMapper.setHighlightBuilder("title","name","abcName"))
                    .withPageable(pageable);
     AggregatedPage result = elasticsearchTemplate.queryForPage(builder.build(), Object.class, myResultMapper);
    return result;
}


这个搜索出现一个奇怪的问题,IndexD的数据排在所有的查询结果最后,就是要翻页到最后一页才出现IndexD的数据,IndexA、IndexB、IndexC的数据则正常在前面的分页

中交替出现。但如果修改IndexD中的abcName的字段名为title,则返回的数据就正常了,请各位帮忙看看是什么原因。在不修改字段名的情况下,如何搜索才能返回正

常的数据呢?

must有打分操作,must改成filter不计算分数你看行不行

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^