我在elasticsearch中有一些类似的数据:
account (http://localhost:9200/myapp/account/1)
========
name
state
groups //groups is an array containing objects like so {id: 1, starred: true}
//the id is the id of the group type
email (http://localhost:9200/myapp/email/1?parent=1)
========
email
primary //just a boolean to denote whether this email is primary or not
group
========
name
description
email
s 是 的孩子account
。
基于imotov 的优秀答案,我能够运行搜索account.name
并email.email
返回account
搜索前缀与上述 2 个字段匹配的 ALL:
{
"query": {
"bool": {
"must": [
{
"term": {
"statuses": "active"
}
}
],
"should": [
{
"prefix": {
"name": "a"
}
},
{
"has_child": {
"type": "email",
"query": {
"prefix": {
"email": "a"
}
}
}
}
],
"minimum_number_should_match" : 1
}
}
}
我现在想做的是为每个结果返回 2 个自定义字段:
对于每个结果返回一个名为 的字段
email
,如果搜索与email
类型(它的子类型)匹配,则account
返回该电子邮件,否则返回primary
链接到该帐户的电子邮件,如果没有,null
则可以返回。对于每个结果,返回一个名为
group
. 该字段的值应包含group
其 id 存储在groups
数组中的星号的名称。本质上:在 each 中查找 true 的group.id
位置,然后根据我们找到的 id从类型返回匹配项。group.starred
account.groups
group.name
group
我一直在查看脚本字段,但我不确定它是否能够为每次点击返回字段。我也不确定上述是否真的可以在 ES 中完成。
有人可以提供一些关于这是否可能以及如何开始的指示吗?