弹性搜索创建一个动态字段作为响应
Elastic search create a dynamic field in response
我正在做一个 Elasticsearch 项目。我想在查询索引时获得一个额外的列作为响应。举例来说,如果我有一个包含两列 num1
和 num2
的索引,当查询该索引时,它应该以两列(num1
和 num2
)响应,但也附加列 add_result
(实际上是两列的加法)。如果我像下面这样正常查询它,它只会用两列进行响应
{
query:{
match_all : {}
}
}
在我的用例中,我尝试过:
{
"runtime_mappings": {
"add_result": {
"type": "double",
"script": "emit(doc['file_count'].value + doc['follower_count'].value)"
}
},
"query": {
"match_all": {}
}
}
是的,有两种方法:
1。使用 runtime field
此功能自 Elasticsearch 7.12 起可用。只需使用如下请求正文向 _search
端点发出 GET
请求:
{
"runtime_mappings": {
"add_result": {
"type": "double",
"script": "emit(doc['num1'].value + doc['num2'].value)"
}
},
"fields": ["add_result", "num*"],
"query": {
"match_all": {}
}
}
您需要在 fields
参数中明确指定要恢复运行时字段。
2。使用 script_field
请求如下所示:
{
"query": {
"match_all": {}
},
"fields": ["num*"],
"script_fields": {
"add_result": {
"script": {
"lang": "painless",
"source": "doc['num1'].value + doc['num2'].value"
}
}
}
}
请注意,您仍然需要 fields
参数,但您不需要在 fields
参数。
我正在做一个 Elasticsearch 项目。我想在查询索引时获得一个额外的列作为响应。举例来说,如果我有一个包含两列 num1
和 num2
的索引,当查询该索引时,它应该以两列(num1
和 num2
)响应,但也附加列 add_result
(实际上是两列的加法)。如果我像下面这样正常查询它,它只会用两列进行响应
{
query:{
match_all : {}
}
}
在我的用例中,我尝试过:
{
"runtime_mappings": {
"add_result": {
"type": "double",
"script": "emit(doc['file_count'].value + doc['follower_count'].value)"
}
},
"query": {
"match_all": {}
}
}
是的,有两种方法:
1。使用 runtime field
此功能自 Elasticsearch 7.12 起可用。只需使用如下请求正文向 _search
端点发出 GET
请求:
{
"runtime_mappings": {
"add_result": {
"type": "double",
"script": "emit(doc['num1'].value + doc['num2'].value)"
}
},
"fields": ["add_result", "num*"],
"query": {
"match_all": {}
}
}
您需要在 fields
参数中明确指定要恢复运行时字段。
2。使用 script_field
请求如下所示:
{
"query": {
"match_all": {}
},
"fields": ["num*"],
"script_fields": {
"add_result": {
"script": {
"lang": "painless",
"source": "doc['num1'].value + doc['num2'].value"
}
}
}
}
请注意,您仍然需要 fields
参数,但您不需要在 fields
参数。