多索引联合查询,修改其中一个索引的字段名后对查询结果顺序有影响,请问是什么原因
我刚学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
must有打分操作,must改成filter不计算分数你看行不行
不知道你这个问题是否已经解决, 如果还没有解决的话: