我们最近从elasticsearch 5.5版本迁移到7.7elasticsearch 7.7
版本去掉了多种类型的概念,所以我们使用JOIN数据类型来映射用户和tweet之间的关系,如下所示
https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html
PUT twitter
{
"mappings": {
"properties": {
"my_id": {
"type": "keyword"
},
"my_join_field": {
"type": "join",
"relations": {
"users": "tweets"
}
}
}
}
}
所以用户是父母,推文是孩子
我的推特索引在用户和推文的组合中有 100 万个条目,当我使用 hasParentQuery / hasChildQuery 时,它按预期工作,我得到了正确的结果。
但是当我尝试只查询 twitter 索引中的父级(即)在这种情况下,我只想搜索twitter 索引中的用户,我查询如下
// to filter only users
QueryBuilder query1 = QueryBuilders.matchQuery("my_join_field", "users");
// to get all the users whose name starts with joh...
QueryBuilder query2 = QueryBuilders.wildcardQuery("username", "*joh*").boost(1.0f);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(resourceQuery).must(wildcard);
SearchResponse searResp = commondao.prepareSearch("twitter").setQuery(boolQueryBuilder).setFrom(from).setSize(size).execute().actionGet();
twitter 索引有 100 万条记录,其中包含 50K 用户条目,并保留为推文。此查询与搜索整个索引 的时间相同(有/没有将 my_join_field 作为用户传递)。
我做错了什么?任何帮助表示赞赏!