2015-04-03 128 views
1

Elasticsearch查询策略,我想找到的色彩效果。在数据库中,它被记录在rgb格式:分别代表red, green, and blue值三个数字的阵列。嵌套数组元素

这里是它是如何存储在数据库和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等被设定为+/- 10从记录在color_data变量的RGB值)

回答

1
  • 首先,你应该米OVE信道数据,以如果需要简单的匹配算法中的(±偏差而不得分)分开的字段(或object至少字段)

  • ,然后就可以进行简单的filter>range查询,通过你的模糊性阈值的查询。

  • 如果您需要评分(如何类似的文档),比您需要执行脚本查询。看看this article

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

+0

我实现了这个按照该示例脚本搜索查询,但由于某种原因,它总是返回完整的记录集......仿佛我问MATCH_ALL:{}。不知道为什么会发生这种情况... – diego 2015-05-15 19:58:44