从 Elasticsearch 查询数据
Querying data from Elasticsearch
使用 Elasticsearch 7.*,尝试在索引 'com-prod' 上执行 SQL 查询:
GET /com-prod/_search
{
"script_fields": {
"test1": {
"script": {
"lang": "painless",
"source": "params._source.ElapsedTime"
}
}
}
}
它给出了输出和下面的成功命中之一:
"hits" : [
{
"_index" : "com-prod",
"_type" : "_doc",
"_id" : "abcd",
"_score" : 1.0,
"fields" : {
"test1" : [
"29958"
]
}
}
现在,我尝试将 ElapsedTime 增加 2,如下所示:
GET /com-prod/_search
{
"script_fields": {
"test2": {
"script": {
"lang": "painless",
"source": "params._source.ElapsedTime + 2"
}
}
}
}
但它实际上将数字 2 添加到输出中,如下所示:
"hits" : [
{
"_index" : "com-prod",
"_type" : "_doc",
"_id" : "abcd",
"_score" : 1.0,
"fields" : {
"test2" : [
"299582"
]
}
}
请指导这里可能有什么问题,以及如何获得 29960 的输出。
您得到的是 299582
,而不是 29960
,因为 ElapsedTime
字段是字符串类型 ("29958"),因此,当您在此使用脚本中添加 2
时,2
会附加在末尾(类似于连接两个字符串)。
所以,为了解决这个问题,您可以:
创建新索引,更新 int
类型的 ElaspsedTIme
字段的映射,然后重新索引数据。然后您可以使用上述问题中给出的相同搜索查询。
使用 Integer.parseInt()
将 string
转换为 int
类型值
GET /com-prod/_search
{
"script_fields": {
"test2": {
"script": {
"lang": "painless",
"source": "Integer.parseInt(params._source.ElapsedTime) + 2"
}
}
}
}
使用 Elasticsearch 7.*,尝试在索引 'com-prod' 上执行 SQL 查询:
GET /com-prod/_search
{
"script_fields": {
"test1": {
"script": {
"lang": "painless",
"source": "params._source.ElapsedTime"
}
}
}
}
它给出了输出和下面的成功命中之一:
"hits" : [
{
"_index" : "com-prod",
"_type" : "_doc",
"_id" : "abcd",
"_score" : 1.0,
"fields" : {
"test1" : [
"29958"
]
}
}
现在,我尝试将 ElapsedTime 增加 2,如下所示:
GET /com-prod/_search
{
"script_fields": {
"test2": {
"script": {
"lang": "painless",
"source": "params._source.ElapsedTime + 2"
}
}
}
}
但它实际上将数字 2 添加到输出中,如下所示:
"hits" : [
{
"_index" : "com-prod",
"_type" : "_doc",
"_id" : "abcd",
"_score" : 1.0,
"fields" : {
"test2" : [
"299582"
]
}
}
请指导这里可能有什么问题,以及如何获得 29960 的输出。
您得到的是 299582
,而不是 29960
,因为 ElapsedTime
字段是字符串类型 ("29958"),因此,当您在此使用脚本中添加 2
时,2
会附加在末尾(类似于连接两个字符串)。
所以,为了解决这个问题,您可以:
创建新索引,更新
int
类型的ElaspsedTIme
字段的映射,然后重新索引数据。然后您可以使用上述问题中给出的相同搜索查询。使用
将Integer.parseInt()
string
转换为int
类型值
GET /com-prod/_search
{
"script_fields": {
"test2": {
"script": {
"lang": "painless",
"source": "Integer.parseInt(params._source.ElapsedTime) + 2"
}
}
}
}