1

我们最近从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 作为用户传递)。

我做错了什么?任何帮助表示赞赏!

4

0 回答 0