2015-04-03 2 views
1

Я пытаюсь найти результаты по цвету. В базе данных он записывается в формате rgb: массив из трех чисел, представляющий значения red, green, and blue соответственно.Стратегия поиска Elasticsearch для вложенных элементов массива

Вот как он хранится в БД и 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 из значений RGB, записанных в color_data переменной)

ответ

1
  • -первых, вы должны м данные Ове канала для разделения полей (или object поля, по крайней мере)

  • Если вам нужна простая согласующей Algo (± отклонения без скоринга), то вы можете выполнять простые filter>range запросов, переходя порог нечеткости в запросе.

  • Если вам нужно забивать (как много похожее на то, что документы), то вам нужно выполнить скриптовые запросы. Посмотрите на this article

BTW, я настоятельно рекомендую работать в HSL пространстве, если вам нужны такие операции, вы получите намного лучшие результаты. Посмотрите на this example

+0

Я реализовал это как скриптовый поисковый запрос для примера, но по какой-то причине он всегда возвращает полный набор записей ... как будто я запросил match_all: {}. Не знаю, почему это происходит ... – diego

Смежные вопросы