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

Scala保存数组在ElasticSearch

和丰羽
2023-03-14

我在我的数据框中有一个字段,其中包含我转向JSON数组字符串的聚合值列表。当我试图将我的数据帧保存到ElasticSearch时,我得到这个错误:

组织。弹性搜索。hadoop。RestEsHadoopRemoteException:mapper_parsing_exception:[userSegments]的对象映射试图将字段[userSegments]解析为对象,但找到了一个具体值

下面是我的列用户的一个例子

{{"segmentID":"c42cc7d7-b2c6-44fa-bc1e-edd8854f2590","segmentName":"Women"},{"segmentID":"cb5b0e7b-cf7c-4395-82a3-4076075d3e6d","segmentName":"Mode"}}

以下是我的索引映射:

"userSegments": {
          "properties": { 
           "segmentID": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
                }
            },           
            "segmentName": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        }

我已经检查过了,我所有的记录看起来都像提供的记录,或者有一个空,所以没有提供给ES的数据类型的混合。

你知道我该怎么处理这个问题吗?

非常感谢Matthieu

共有1个答案

匡玉堂
2023-03-14

对于这些映射,这应该是可行的:

PUT /<your-index>/_doc/doc-1
{
  "userSegments": [
    {
      "segmentID": "c42cc7d7-b2c6-44fa-bc1e-edd8854f2590",
      "segmentName": "Women"
    },
    {
      "segmentID": "cb5b0e7b-cf7c-4395-82a3-4076075d3e6d",
      "segmentName": "Mode"
    }
  ]
}

因此,您需要检查获取数据框架并构建弹性查询的代码是否在做不同的事情。

您的错误强烈表明您的代码正在将数据解析为字符串

PUT /<your-index>/_doc/doc-2
{
  "userSegments": """[{
      "segmentID": "c42cc7d7-b2c6-44fa-bc1e-edd8854f2590",
      "segmentName": "Women"
    },
    {
      "segmentID": "cb5b0e7b-cf7c-4395-82a3-4076075d3e6d",
      "segmentName": "Mode"
    }]"""
}

您应该尝试从您的数据构建一个实际的JSON数组,正如我的第一个演示。

 类似资料:
  • 我有问题保存我的数组列表。当应用程序销毁或更改意图或更改方向时,我想保存我的数组列表: 首先,我尝试保存在文件中,但Paint类不是可序列化类。第二,我尝试使用onSaveInstanceState(Bundle outState)/onRestoreInstanceState(Bundle savedInstanceState),但我无法保存Arraylist;第三,我尝试使用数据库,但没有任何

  • 主要内容:声明数组,处理数组,实例,多维数组,实例,合并数组,实例,创建区间数组,实例,Scala 数组方法Scala 语言中提供的数组是用来存储固定大小的同类型元素,数组对于每一门编辑应语言来说都是重要的数据结构之一。 声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是

  • Scala 语言中提供的数组是用来存储固定大小的同类型元素,数组对于每一门编辑应语言来说都是重要的数据结构之一。 声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引

  • 问题内容: 我想保存额外的信息,然后再将总订单发送到Paypal。对于每一项,我都在MySQL数据库中创建了一个要存储的列。现在,我正在考虑将其保存为一个数组,以后可以在创建PHP页面时阅读。多余的字段取自输入表单字段。 通过使用数组,可以确保不混淆信息吗? 问题答案: 您可以使用/ 存储数组。使用该解决方案,它们不能轻易地从其他编程语言中使用,因此您可以考虑使用/ 代替(它为您提供了广泛支持的格

  • 我不能使用将字符串数组保存到我的数据库中。 (请注意,为了便于编写,下面的所有代码都被简化了) 因此,我声明了person模式的一个变量: 模式本身看起来像: 说到储蓄,它只是一个简单的问题: 所以使用邮递员,我在体内发送一个数组-然而每次我检查数据库,它只是显示一个条目与数组作为一个整体,即我如何发送它: 你知道我应该多做些什么吗?