gpt4 book ai didi

elasticsearch - 存储JSON数组字符串elasticsearch Bug

转载 作者:行者123 更新时间:2023-12-03 00:54:20 25 4
gpt4 key购买 nike

我观察到Elasticsearch 5.2产生了一些奇怪的行为,并且无法调试-因为没有引发错误,也无法在线找到类似的问题/文档。

我在Elasticsearch中(使用python的json.dumps())将JSON数组存储为“字符串”(长话短说,我必须这样做)。但是,当我执行DSL查询时,仅显示包含1个对象的JSON数组(存储为单个字符串)。如果大于1,则只返回一个空桶0个对象。我将它们存储在一个名为“元数据”的字段中。

我很困惑,为什么只显示一部分数据,而忽略其他数据(json数组中有多个对象)。数据被编码为字符串。我知道一个事实,数据存储在索引中。我可以在kibana“发现”中看到它-因为我可以看到带有多个对象的大型JSON字符串。

示例1(带有1个对象的JSON字符串):

[{"score": 0.8829717636108398, "height": 0.875460147857666, "width": 0.3455989360809326, "y": 0.08105117082595825, "x": 0.5616265535354614, "note": "box1"}]



范例2:

[{"score": 0.8829717636108398, "height": 0.875460147857666, "width": 0.3455989360809326, "y": 0.08105117082595825, "x": 0.5616265535354614, "note": "box1"}, {"score": 0.6821991136108398, "height": 0.875460147857666, "width": 0.3455989360809326, "y": 0.08105117082595825, "x": 0.5616265535354614, "note": "box2"}]



这是我的查询:
{
"query": {
"bool": {
"must": [
{
"query_string": {
"analyze_wildcard": true,
"query": "*"
}
},
{
"range": {
"created_at": {
"gte": 1508012482796,
"lte": 1508014282797,
"format": "epoch_millis"
}
}
}
],
"must_not": []
}
},
"size": 0,
"_source": {
"excludes": []
},
"aggs": {
"5": {
"terms": {
"field": "metadata.keyword",
"size": 31,
"order": {
"_count": "desc"
}
}
}
}
}

该查询仅返回带有1个对象的字符串。见下文:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 4214,
"max_score": 0,
"hits": []
},
"aggregations": {
"5": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 35,
"buckets": [
{
"key": "[]",
"doc_count": 102
},
{
"key": "{}",
"doc_count": 8
},
{
"key": "[{\"score\": 0.9015679955482483, \"height\": 0.8632315695285797, \"width\": 0.343660831451416, \"y\": 0.08102986216545105, \"x\": 0.5559845566749573, \"note\": \"box11\"}]",
"doc_count": 6
},
{
"key": "[{\"score\": 0.6365205645561218, \"height\": 0.9410756528377533, \"width\": 0.97696852684021, \"y\": 0.04701271653175354, \"x\": 0.013666868209838867, \"note\": \"box17\"}]",
"doc_count": 4
},
...
}

正如观察到的那样,只有带有1个对象(即[{..}])的JSON字符串的数据才返回/可见。它完全忽略了具有多个对象(即[{...},{...}])的字符串。

更多说明:
  • 使用默认映射
  • 我能够获取JSON字符串(无论对象数量如何)
    通过文档ID查询,或通过精确字段值使用“匹配”时)
  • 最佳答案

    如果您使用的是默认映射,则很可能是因为您的关键字映射具有ignore_above: 256设置,如下所示:

    {
    "mappings": {
    "my_type": {
    "properties": {
    "metadata": {
    "type": "keyword",
    "ignore_above": 256
    }
    }
    }
    }
    }

    您可以增加该限制,以索引长度超过256个字符的JSON字符串。

    关于elasticsearch - 存储JSON数组字符串elasticsearch Bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46749365/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com