Повышение от запроса в elasticsearch с использованием шины

У меня есть группа пользователей с опытом (например, "информатика") и навыками (например, "php"). Я пытаюсь найти их, подчеркивая либо фон, либо навыки (пользователь выбирает любой вариант при поиске).

Мне удалось заставить это работать, используя curl с этой строкой JSON (в этом случае я подчеркиваю фон):

'"query" : { 
    "bool" : {
        "should" : [
            {
                "text" : {"skills" : {"query" : "php mysql html css"}}
            },
            {
                "text" : {"backgrounds" : {"query" : "computer science", "boost" : 5}}
            }
        ]
    } 
}'

Теперь моя проблема в том, что я не могу понять, как использовать этот JSON в качестве запроса в Tire или написать эквивалент в Tire DSL.

ИЗМЕНИТЬ

На самом деле я понял это, посмотрев исходный код Tire.

Вот как это выглядит:

results = Users.search(:load => true) do
  query do
    boolean do
      should { string "skills:#{skills_query}", {:boost => skills_boost}}
      should {string "backgrounds:#{backgrounds_query}", {:boost => backgrounds_boost}}
    end
  end
end

Я установил усиление на 5 для того, что хочу подчеркнуть, и на 0 для другого.


person user1001113    schedule 27.10.2012    source источник


Ответы (1)


Кажется, что существует серьезная нехватка хорошей документации о том, как правильно это сделать в шинах. После нескольких часов поиска я нашел этот пост. Позже я напишу об этом в блоге, чтобы, надеюсь, люди не копались вечно, как я. Во всяком случае, ниже то, что я сделал, основываясь на вашем предложении, и это сработало как шарм, подняв поле имени над другими совпадениями атрибутов.

page = params[:page].present? ? params[:page] : 1
tire.search(page: page, per_page: ApplicationHelper::MAX_SEARCH_LENGTH) do
  query do
    boolean do
      should { string "name:#{params[:q]}*", {:boost => 100}}
      should { string "#{params[:q]}*"}
    end
  end
end
person Shawn Deprey    schedule 16.04.2013