我想通过颜色找到结果。在数据库中,它以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 变量)
答案 0 :(得分:1)
首先,您应该将频道数据移至单独的字段(或至少移至object
字段)
如果你需要简单的匹配算法(±偏差没有评分),那么你可以执行简单的filter>range
查询,在查询中传递模糊阈值。
如果您需要评分(与文档类似的多少),则需要执行脚本查询。请查看this article
顺便说一句,我强烈建议你在HSL领域工作,如果你需要这样的操作,你会得到更好的结果。看看this example