Elasticsearch中两个字段之间的术语聚合

时间:2019-03-23 19:27:16

标签: elasticsearch elasticsearch-6

我不确定我想做什么。我的数据看起来像这样:

{
    "Actor1Name": "PERSON",
    "Actor2Name": "OTHERPERSON"
}

我使用copy_to来用两个值填充辅助字段ActorNames。

我正在尝试建立一种预先输入功能,用户可以开始输入名称,并且该名称将以该前缀的热门列表填充。我希望它跨两个演员字段进行搜索。唯一的问题是,当我搜索ActorNames时,即使只有一个匹配项,我也会得到两个值。这意味着,如果我正在搜索前缀O,则根据上述文档,我的结果中将同时获得OTHERPERSON(期望)和PERSON(不期望)。

我当前的解决方案是运行2个聚合并将其在客户端进行合并,但是是否有可能仅在ES中做到这一点?

当前查询:

{
  "query": {
    "prefix": {
      "ActorNames": "O"
    }
  },
  "aggs": {
    "actor1": {
      "filter": {
        "prefix": {
          "Actor1Name": "O"
        }
      },
      "aggs": {
        "actor1": {
          "terms": {
            "field": "Actor1Name",
          }
        }
      }
    },
    "actor2": {
      "filter": {
        "prefix": {
          "Actor2Name": "O"
        }
      },
      "aggs": {
        "actor2": {
          "terms": {
            "field": "Actor2Name",
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

如果要在两个字段上检查前缀条件,为什么不在两个字段上使用前缀ANDING?喜欢:

GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "Actor1Name": "O"
          }
        },
        {
          "prefix": {
            "Actor2Name": "O"
          }
        }
      ]
    }
  }
}