我不确定我想做什么。我的数据看起来像这样:
{
"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",
}
}
}
}
}
}
答案 0 :(得分:0)
如果要在两个字段上检查前缀条件,为什么不在两个字段上使用前缀ANDING?喜欢:
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"Actor1Name": "O"
}
},
{
"prefix": {
"Actor2Name": "O"
}
}
]
}
}
}