嵌套数组元素的Elasticsearch查询策略

时间:2015-04-03 17:48:09

标签: arrays json elastic-map-reduce elasticsearch

我想通过颜色找到结果。在数据库中,它以rgb格式记录:分别代表red, green, and blue值的三个数字的数组。

以下是它如何存储在db和elasticsearch记录中(在数组中存储4个rgb颜色):

"color_data": 
    [
        [253, 253, 253], 
        [159, 159, 159], 
        [102, 102, 102], 
        [21, 21, 21]
    ]

是否有查询策略可以让我找到similar颜色?即完全匹配或在rgb值的近距离范围内?

这是我正在尝试的方法,但访问数组值的寻址方法不起作用:

curl -X GET 'http://localhost:9200/_search' -d '{
    "from": 0,
    "size": 50,
    "range": {
        "color_data.0.0": {
            "gte": "#{b_lo}",
            "lte": "#{b_hi}"
        },
        "color_data.0.1": {
            "gte": "#{g_lo}",
            "lte": "#{g_hi}"
        }
    }
}'

r_lo,r_hi 等等,从 color_data 变量)

1 个答案:

答案 0 :(得分:1)

  • 首先,您应该将频道数据移至单独的字段(或至少移至object字段)

  • 如果你需要简单的匹配算法(±偏差没有评分),那么你可以执行简单的filter>range查询,在查询中传递模糊阈值。

    < / LI>
  • 如果您需要评分(与文档类似的多少),则需要执行脚本查询。请查看this article

顺便说一句,我强烈建议你在HSL领域工作,如果你需要这样的操作,你会得到更好的结果。看看this example