当前位置: 首页 > 知识库问答 >
问题:

弹性搜索在重新编制索引期间无痛脚本问题

洪开济
2023-03-14

我想将地理信息的旧数据重新索引到地理点。

以前的数据包含这种格式的位置。

"geoip": {
    "location": {
        "lon": 67.0703,
        "lat": 24.9206
    }
} 

我想像这样在数组中的地理点中重新索引位置

"geoip": {
    "location": [lon, lat]
} 

这是映射

PUT logs-audit-geopoint/_mapping/doc
{
  "properties": {
    "json":{
      "properties": {
        "geoip":{
          "properties":{
            "location": {
              "type": "geo_point"
            }
          }
        }
      }
    }
  }
}

这是我执行重新索引的请求。

POST _reindex
{
  "source": {
    "index": "logs-audit"
  },
  "dest": {
    "index": "logs-audit-geopoint"
  },
  "script": {
     "source": "def geoip = ctx._source.json.geoip; if(geoip != null) { geoip.location = [geoip.longitude, geoip.latitude]; }",
      "lang": "painless"
    }
}

问题它没有覆盖位置:{} 到位置:[]

共有1个答案

孙熠彤
2023-03-14

使用临时索引来转换数据:

日志-审核(源)< br >测试(临时)< br >日志-审核-地理点(目标)

逐步迁移的过程:

1-使用新变量location_new从源索引[logs-审计]转移到[test]索引(空的没有映射)。

    POST _reindex
    {
      "source": {
        "index": "logs-audit"
      },
      "dest": {
        "index": "test"
      },
      "script": {
         "source": "def geoip = ctx._source.json.geoip; if(geoip != null && geoip != '' ) { geoip.location = null; geoip.location_new = [geoip.longitude, geoip.latitude] }",
          "lang": "painless"
        }
    }

2-使用以下映射创建新索引(geoip.location = geo_point)

    PUT logs-audit-geopoint/_mapping/doc
    {
      "properties": {
        "json":{
          "properties": {
            "geoip":{
              "properties":{
                "location": {
                  "type": "geo_point"
                }
              }
            }
          }
        }
      }
    }

3-然后从测试索引转移到新索引。

    POST _reindex
    {
      "source": {
        "index": "test"
      },
      "dest": {
        "index": "logs-audit-geopoint"
      },
      "script": {
         "source": "def geoip = ctx._source.json.geoip; if(geoip != null && geoip != '' ) { geoip.location = geoip.location_new }",
          "lang": "painless"
        }
    }
 类似资料:
  • 我是ES的新手,我正在尝试使用聚合编写搜索查询。 在写同样的东西时,我面临着无痛脚本的问题。 哪里可以得到完整的无痛脚本文档,用于弹性搜索?

  • 我在elasticsearch中创建了一个观察器,当我们在索引中10分钟没有新条目或事件时,它会报告,这可以通过查看条目中的源字段来进一步划分。 我只得到了索引的最后10分钟,并查看了桶中不存在哪个源。 为此,我首先创建我们收到的所有源类型的列表,然后从返回的存储桶键创建一个列表。然后,我想比较列表以查看缺少哪个列表,然后将其传递到消息中。 我在for循环中遇到了一个通用错误。任何反馈对弹性和无痛

  • 我有一个弹性查询脚本,用于使用我给出的参数计算地面距离,我必须在多个查询中使用它。是否有一种方法可以避免这种重复,例如,有一种计算全局变量并在所有脚本中使用它的方法。在本例中,我希望计算<code>距离 映射:

  • 我目前正在使用Elastic search 5.2,并尝试使用以下rest api执行upsert操作: > http://ip:9200/indexname/typename/id/_update Json有效载荷: } 此api执行以下操作: 1.)如果在弹性搜索中没有找到索引,则使用upsert字段中提供的json创建索引。< br> 2。)如果索引存在,那么它通过运行文档中提供的简单脚本来

  • 我编写了一个reindex方法,可以执行以下操作: 它确实起到了作用,但我现在确定,仅仅删除然后创建一个索引是否有意义。如何改进此方法?

  • 我正在使用批量请求执行弹性搜索完整索引。我在索引过程中遇到了一个问题,结果是空的。由于我正在完整索引期间删除索引,因此如何处理这种情况。 我已经完成了以下步骤: 删除索引 创建索引 创建映射 批量请求 索引属性和映射: } 我有大约7.5万份文件。 谢谢,Sree。