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

ElasticSearch索引和映射数组

关浩壤
2023-03-14

我目前正在使用ElasticSearch(PHP客户端)构建一个电子商务系统搜索,但遇到了一个问题

我存储的数据是简单文本(如产品名称)和列表(如颜色、大小)的混合体

我遇到的问题是当产品没有任何颜色时

我有以下字段

id - integer
title - string
codes - array
properties - array
attributes - array

所以当我发送一个产品时,它看起来是这样的

id: 1
title: ABC
codes: ['ABC', '123']
properties: ['purple']
attributes: ['large', 'small']

这就像预期的一样,但是当我尝试发送这样的东西时

id: 2
title: DEF
codes: ['DEF']
properties: []
attributes: []

它抛出了一个错误:

{“error”:{“root_cause”:[{“type”:“mapper_parsing_exception”,“reason”:“object mapping for[codes]试图将字段[null]解析为对象,但找到了一个具体值”}],“type”:“mapper_parsing_exception”,“reason”:“object mapping for[codes]试图将字段[null]解析为对象,但找到了一个具体值”},“status”:400}

我试着为每个字段映射我的字段(如下所示:https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html)

attributes: {
    dynamic: true,
    properties: []
}

但这似乎没有帮助,医生说你不能指定一种类型的数组

谁能给我指出正确的方向吗?

共有1个答案

班承德
2023-03-14

多亏了apokryfos和Amir masud zarebidaki的评论,他们让我找到了答案

最后,我将代码、属性和属性的映射发送为“文本”,默认情况下,对象被创建为动态对象,因此它们可以有多个值

我还让我的代码去掉所有空数组,这样如果产品没有属性,它们就不会被发送

这两个变化结合起来解决了我的错误

如果其他人出现此错误,请提醒:

无法获取START_对象上的文本

检查您没有发送带有非增量键的数组,例如:

[attributes] => Array
(
    [0] => Game
    [1] => Chicken
    [2] => Salmon
    [6] => Chicken
)

我遇到了这个问题,一个简单的数组_values($attributes)为我解决了这个问题(PHP)

 类似资料:
  • 问题内容: 我正在努力完成索引创建这一简单任务,目标是使用分析器和字段映射创建索引。当我使用分析器创建索引时,我可以通过分析api调用与分析器通信,但是当我添加映射信息时,创建索引调用失败,并显示“字段[$ field]]找不到Analyzer [analyzer1]”,我创建了一个脚本来显示问题: 问题答案: 我相信您的问题是这些设置需要嵌套在JSON的一个节点内,而不是您所拥有的嵌套在一个节点

  • 我试图通过Python在Elasticsearch中创建一个索引。我部署了一个ES的本地实例,查询运行良好。但是,我有一个模式。这里是: 下面是我用来创建这个索引的代码

  • 我想为我的索引更新elasticsearch中的默认映射。但是所有的文档都指出我们必须为更新映射提供类型。问题是我有很多索引类型,它们是动态创建的,就像新类型的文档出现时一样。所以最好的处理方法是默认映射类型。因为我不必为每个类型定义映射。但现在我无法更新我的索引默认映射。如果可能的话,请告诉我?

  • 我对弹性搜索一无所知。所以,如果这是一个愚蠢的问题,请原谅我,我的问题可能已经在其他地方得到了回答,但我找不到。我想使用弹性搜索作为我的网络中PDF和docx的搜索引擎。我使用fscrawler将PDF文件吸收到弹性搜索中。因为我要摄取的文档是几种语言的,所以我想使用n-graming进行词干分析。为此,我想像这样更新我的映射 现在我收到了这个错误信息 {“error”:{“root_cause”

  • 问题内容: 我想要对Elasticsearch中已存在的索引进行以下设置和映射设置: 我试图添加以下两行代码: 但这是结果: 任何人?非常感谢, 斯汀 这似乎可行: 问题答案: 如果在发送更改后查看设置,您会发现分析仪不存在。实际上,您不能在实时索引上更改设置的“分析”部分。最好使用所需的设置来创建它,否则您可以将其关闭: 关闭索引后,您可以发送新设置。之后,您可以重新打开索引: 关闭索引后,它不

  • 问题内容: 也许我缺少一些简单的东西,但仍然无法弄清楚以下内容: 从ES 6.x开始,该字段已弃用,建议使用说明(https://www.elastic.co/guide/en/elasticsearch/reference/current/copy- to.html )。 但是,给我的印象是,您需要显式指定要复制到自定义字段的字段。但是,如果我使用动态映射,则我不事先知道字段,因此不能使用? 我