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

Elasticsearch 7.x映射器[location]不能从[geo_point]类型更改为[text]

公良天逸
2023-03-14

我在elasticsearch中有一个索引,其位置字段映射为geo_point。这是“索引管理设置”的“映射”选项卡中的内容。

{
  "mappings": {
    "_doc": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

根据elasticsearch上的geo-point文档,我应该可以将它作为一个字符串“lat,lon”发送

这是发送到弹性的json中的位置的值

'location': '32.807078,-89.908972'

我得到了这个错误信息

RequestError(400, 'illegal_argument_exception', 'mapper [location] cannot be changed from type [geo_point] to [text]')

更新

我能够获得数据,但现在它是作为文本数据而不是geo_point!

这与其他映射一起出现在我的索引映射中

这是在数据中

尽管映射是存在的,但数据是文本,我无法在地图图表中使用它。

溶液

除了检查的答案外,还需要执行此操作。

回家-

删除了原始索引模式并创建了一个新模式,现在它被视为geo_data!

共有1个答案

司健柏
2023-03-14

根据您的索引映射,您似乎正在使用7.x之前的elasticsearch版本。

我使用问题中提供的相同索引映射对文档进行了索引(使用版本6.8)。不要忘记在URL中添加_doc(或您在索引映射中使用的类型)(在索引数据时)

索引映射:

{
  "mappings": {
    "_doc": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

索引数据:

在将文档发布到 Elasticsearch 时,请确保 URL 的格式如下所述:

PUT my_index/_doc/1

{
  "location": "41.12,-71.34" 
}

回应:

{
  "_index": "65076754",
  "_type": "_doc",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

编辑1:

根据下面的评论,OP正在使用7.x

使用7.x的索引映射

{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
}
 类似资料:
  • 我正在编写一个映射函数,它将键生成为一些user_id,值也是文本类型。我是这样做的 然后,在主程序中,我将映射器的输出类设置为: 因此,即使我将输出值的类设置为text.class,但在编译时仍然会出现以下错误:

  • 我在解决泛型问题时遇到了一些麻烦。我有一个“猫”对象列表和一个“狗”对象列表,我需要将它们传递到同一个方法中。该方法的返回类型是一个“字符串”和“动物列表”的映射,我试图找出一种方法来将带有动物列表的映射转换为带有猫或狗列表的映射。 这工作很好,如果我有一个单独的方法猫和狗,但我正在寻找一个更灵活的解决方案。 标题中出现错误的行: 注意:这是一个简化的例子,我必须能够使用地图中的列表作为“猫”或“

  • 我试图通过使用多个测试数据在Cucumber DataTable中使用映射来自动化一个场景。在本测试中,我们将向测试步骤传递两次Username和Password。所以我们的测试应该输入用户名和密码一次,点击登录按钮,并重复相同的步骤再次。 我已经尝试使用for循环来使用Maps集合重复测试。1.我收到一个错误,表示类型不匹配:无法从元素类型2。当我将其转换为时,我得到另一个错误,说明方法send

  • 我正在处理一个web服务,它一次加载ApplicationResponse对象n。我想创建一个流,它允许我使用所有这些流,而不必担心分页,因此我(不完整)使用了Java流。 我有一个生成页码的流。我想使用我以前写的函数将这些数字映射到响应流。 问题是,它似乎希望我的arrow函数返回int,而不是我所期望的流。 如何重写此表达式以使映射操作正常工作?

  • 我正在使用MapStruct和maven,如文档中所述(http://mapstruct.org/documentation/stable/reference/html/). 现在,我想将生成的映射器类的位置从目标文件夹更改为源文件夹。我已经阅读了如何更改mapstruct生成的类location和M2E,以及如何将maven生成的源文件夹作为eclipse源文件夹,并通过使用maven处理器插件

  • 问题内容: Whenver我有一个角表达式作为值的,它不会工作: 数字值将转换为字符串,并且复选框根本无法使用。 http://jsfiddle.net/punund/NRRj7/3/ 问题答案: 您不能动态更改输入的类型,因为IE不允许这样做,并且AngularJS需要跨浏览器兼容。因此,即使您可能会看到更改后的类型显示在源代码中,AngularJS也不会接受它- 类型仅被评估一次,并且无法更改