【问题标题】:Why is ElasticSearch putting strings in arrays?为什么 ElasticSearch 将字符串放入数组中?
【发布时间】:2021-10-27 18:39:49
【问题描述】:

我正在将文档添加到我在 elasticsearch (v7.15.1) 中创建的新索引中。我有一个明确映射的嵌套字段:

curl -X PUT "localhost:9200/newIndex/_mapping?pretty" -H 'Content-Type: application/json' -d'
{
    "properties": {
        "authors": {
            "type": "nested"
        }
    }
}
'

“作者”下的两个属性都是字符串。将文档添加到索引时,author下的每个属性都是一个包含字符串的数组,

例如

“作者”:[“约翰·史密斯”]

而不是

“作者”:“约翰·史密斯”

我尝试过显式映射嵌套字段和文本,得到了相同的结果。有没有办法防止这种情况发生?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您不需要嵌套类型。用于对象数组的嵌套字段,而不是字符串数组。所以你可以使用如下映射:

    {
        "properties": {
            "authors": {
                "type": "keyword"
            }
        }
    }
    

    或者如果你只想搜索名字,你可以使用 "type" : "text",或者两者都用 multifield '

    【讨论】:

    • 对不起,我没有解释清楚,作者字段是一个对象数组。每个对象代表具有多个字段的单个作者。作者字段的值是字符串,但在数组中作为字符串上传。
    • 我理解正确吗,您的映射应该是这样的:{“properties”:{“authors”:{“type”:“nested”,“properties”:{“name”:{ "type": "keyword" }, "user" :{ "type": "keyword" } } } } } 你能分享一下数据示例吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多