【问题标题】:Elastic search fill field B with array of words from the value of field A in document弹性搜索用文档中字段 A 的值中的单词数组填充字段 B
【发布时间】:2019-01-16 23:35:19
【问题描述】:

我想添加一个字段 B,它应该包含一个包含字段 A 单词的数组。我想使用某种脚本将字段 A 的值分解为单词部分。

所以是这样的: 字段 A:“快速棕色狐狸” 字段 B:["The","Quick","Brown","Fox"]

我正在努力在谷歌上搜索如何在 ElasticSearch 5.6 中实现这一目标

【问题讨论】:

    标签: elasticsearch mapping word elasticsearch-5


    【解决方案1】:

    您可以使用 update by query API 和一个拆分 fieldA 并将结果数组存储到 fieldB 的脚本来实现此目的:

    POST test/_update_by_query
    {
      "script": {
        "inline": "ctx._source.fieldB = /\\s+/.split(ctx._source.fieldA);",
        "lang": "painless"
      },
      "query": {
        "match_all": {}
      }
    }
    

    你会得到这个:

        {
          "fieldA" : "The brown fox",
          "fieldB" : [
            "The",
            "brown",
            "fox"
          ]
        }
    

    【讨论】:

    • 尝试这样做会给我以下错误:“type”:“parse_exception”,“reason”:“期望 [inline]、[file] 或 [stored] 字段之一,但没有找到”我'已将 fieldB 替换为“zoektermen”,将 fieldA 替换为“hoofdtitel”。
    • 抱歉,您使用的是 5.6,我在 6.5 上进行了测试...查看我的更新答案
    • 感谢您的快速回复。我需要将 Regex enabled 设置为 true。我在 AWS 上使用 ElasticSearch。我用谷歌搜索,显然我无法更改 AWS 中的值。 (stackoverflow.com/questions/47271384/…) 你知道第二种解决方案吗?
    • 是的,在索引时拆分该字段 :-) 或更好:迁移到比 AWS 托管的 ES 好得多的 ES Cloud。
    • 你可以找到一个很好的比较here和更老的here
    猜你喜欢
    • 2020-09-11
    • 2016-08-10
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多