Field 返回一个自定义字段,其中值取决于elasticsearch中的查询
我在elasticsearch中有一些类似的数据:Field 返回一个自定义字段,其中值取决于elasticsearch中的查询,field,elasticsearch,Field,elasticsearch,我在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/myap
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
电子邮件
s是帐户
的子帐户
基于,我能够在account.name
和email.email
上运行搜索,并返回所有account
s,其中搜索的前缀与上述两个字段匹配:
{
"query": {
"bool": {
"must": [
{
"term": {
"statuses": "active"
}
}
],
"should": [
{
"prefix": {
"name": "a"
}
},
{
"has_child": {
"type": "email",
"query": {
"prefix": {
"email": "a"
}
}
}
}
],
"minimum_number_should_match" : 1
}
}
}
我现在要做的是为每个结果返回2个自定义字段:
- 对于每个结果,返回一个名为
的字段,如果搜索与电子邮件
类型(它是电子邮件
的子项)匹配,则返回该电子邮件,否则返回链接到该帐户的帐户
电子邮件,如果没有,则可以返回主
空
- 对于每个结果,返回一个名为
的字段。该字段的值应包含带星号的group
组的名称,其id存储在
数组中。本质上:查找组
,其中group.id
在每个group.starred
中为true,然后根据找到的id从帐户.groups
类型返回匹配的组
组.name
有人能提供一些关于这是否可能以及如何开始的提示吗?目前,根本无法访问
has_child
或嵌套的子句中的数据
唯一的解决方案是获取一些数据,在客户机上做出一些决策,然后获取更多数据
以下是我为实现这一目标所做的:
- 运行上面的查询并获取数据
- 要处理显示匹配电子邮件或主电子邮件(在电子邮件类型上运行):
根据上面的查询,我们可以得到与搜索词匹配的任何电子邮件地址。请记住将上述查询中的字段设置为包含父项
然后,我们可以使用array_diff()
或PHP以外语言中的类似函数来区分上面的父ID和原始查询。这将给我们一个没有匹配电子邮件的帐户列表。然后发送另一个请求以获取这些帐户的主要电子邮件
对于组,将查询发送到类型账户
和:
- 将
\u id
约束到帐户id列表
- 将带星号的组约束为
true
这会给你一张明星组的名单。要获取更多信息(姓名等),请向键入group
和发送查询:
- 将
\u id
约束到上面的组id
最后,进行一些客户端处理,将其放在一起,以便程序的下一部分更容易使用。目前,根本无法访问has_child
或嵌套的子句中的数据
唯一的解决方案是获取一些数据,在客户机上做出一些决策,然后获取更多数据
以下是我为实现这一目标所做的:
- 运行上面的查询并获取数据
- 要处理显示匹配电子邮件或主电子邮件(在电子邮件类型上运行):
根据上面的查询,我们可以得到与搜索词匹配的任何电子邮件地址。请记住将上述查询中的字段设置为包含父项
然后,我们可以使用array_diff()
或PHP以外语言中的类似函数来区分上面的父ID和原始查询。这将给我们一个没有匹配电子邮件的帐户列表。然后发送另一个请求以获取这些帐户的主要电子邮件
对于组,将查询发送到类型账户
和:
- 将
\u id
约束到帐户id列表
- 将带星号的组约束为
true
这会给你一张明星组的名单。要获取更多信息(姓名等),请向键入group
和发送查询:
- 将
\u id
约束到上面的组id
最后,进行一些客户端处理,将其放在一起,以便程序的下一部分更容易使用
{"query":
{"bool":{
"should":{
{
"prefix":{
"email" : "the query"
}
},
{
"terms":{
"_parent" : ["list", "of", "account", "ids"]
}
}
}
}
}
}