2013-07-07 4 views
0

Я создаю приложение, в котором пользователь запрашивает базу данных ElasticSearch на основе критериев, а затем возвращаю три лучших результата. Часть «наилучшего» означает, что, хотя три результата должны соответствовать критериям, я пытаюсь максимизировать между ними разницы. Например, предполагается, что каждый продукт имеет цвет, размер и год, и я делаю запрос для всех продуктов с годом «2013» и размером «маленький». Я не хочу видеть 3 синих продукта. Я пытаюсь сказать «найти три документа, которые соответствуют критериям, но затем попытаться максимизировать различия в полях, которые не соответствуют критериям».Сортировка elasticsearch по другим результатам

Я полагаю, что я мог бы решить это на стороне клиента и вернуть много более трех результатов и разобраться с ним там, но мне интересно, есть ли способ, которым я могу это сделать, не возвращая больше данных, чем мне нужно , Возможно, ElasticSearch не подходит для работы здесь, и если это так: что такое?

+0

Означает ли это, что вы хотите исключить какой-либо продукт, который имеет цвет запись? Или вы хотите, чтобы пользователь указал «год: 2013, размер: маленький, цвет: НЕ синий»? – Phil

ответ

0

Попробуйте использовать булев запрос, подобный следующему:

{ 
    "bool" : { 
     "must" : {    
     }, 
     "must_not" : { 
      "term" : { "color" : "blue" } 
     }, 
     "should" : [ 
      { 
       "term" : { "year" : "2013" } 
      }, 
      { 
       "term" : { "size" : "small" } 
      } 
     ], 
     "minimum_should_match" : 1, 
     "boost" : 1.0 
    } 
} 

См DSL elasticsearch запросов для получения дополнительной информации: http://www.elasticsearch.org/guide/reference/query-dsl/bool-query/