2016-06-15 3 views
1

Я пытаюсь накапливают счет с elasticsearch 2.3elasticsearch BOOL узел с constant_score

Я хочу постоянная оценка с publishEnd IS NULL и бронирование = верно.

И после того, что я хочу другого скоринг в зависимости от марки/модели/топлива

Вот мой поиск Титулы:

$params = [ 
     'index' => 'app', 
     'type' => 'ad', 
     'body' => [ 
      "from" => 0, 
      "size" => 12, 
      'query' => [ 
       "constant_score" => [ 
        "filter" => [ 
         "and" => [ 
          ["missing" => [ "field" => "publishEnd" ]], 
          ["term" => ['booked' => 0]], 
         ], 
        ], 
       ], 
       'bool' => [ 
        'filter' => [ 
         ["term" => ['brand' => 'renault']], 
        ], 
       ], 
      ], 
     ], 
    ]; 

Я хочу, чтобы добавить вес на результаты, а не фильтровать их.

Это нормально для постоянной фильтрации баллов, но у меня возникают проблемы с добавлением веса для определенных брендов.

Я получил эту ошибку, когда я добавляю Ьоо узел:

parse_exception: не удалось разобрать источник поиска. Ожидается имя поля, но получил [START_OBJECT]

Спасибо,

Фил.

Редактировать Благодаря israelst, вот правильные параметры:

$params = [ 
     'index' => 'app', 
     'type' => 'ad', 
     'body' => [ 
      "from" => 0, 
      "size" => 12, 
      'query' => [ 
       "bool" => [ 
        'should' => [ 
         "constant_score" => [ 
          "filter" => [ 
           "and" => [ 
            ["missing" => [ "field" => "publishEnd" ]], 
            ["term" => ['booked' => 0]], 
           ], 
          ], 
         ], 
         'filter' => [ 
          ["term" => ['brand' => 'renault']], 
         ], 
        ], 
       ], 
      ], 
     ], 
    ]; 

ответ

0

Вы получаете это исключение, потому что вы используете «constant_score» и «логическое значение» на том же уровне. Вместо этого вам нужно обернуть их внутри «must» или «should» под одним «bool». Результат должен быть примерно таким:

"query": { 
    "bool": {    
    "must": [ 
     {"constant_score": { 
     "filter": { 
      "and": { 
       "filters": [ 
        {"missing": { 
        "field": "publishEnd" 
        }}, 
        {"term": { 
        "booked": 0 
        }} 
       ] 
      } 
     } 
    }}, 
    {"bool": { 
     "filter": { 
      "term": { 
       "brand": "renault" 
      } 
     } 
    }} 
    ]  
    } 
} 
+0

Да, уровень должен работать! Благодарю. –

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