2

バックグラウンド (「コンピューター サイエンス」など) とスキル (「php」など) を持つ一連のユーザーがいます。背景かスキルのどちらかを強調しながら、それらを検索しようとしています (ユーザーは検索時にどちらかのオプションを選択します)。

このJSON文字列でcurlを使用してこれを機能させることができました(この場合、背景を強調しています):

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

ここでの問題は、この JSON を Tire でクエリとして使用する方法と、Tire DSL で同等のものを記述する方法がわからないことです。

編集

実際、タイヤのソースコードを見て、それを理解しました。

これは次のようになります。

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に設定しています。

4

1 に答える 1

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
于 2013-04-16T23:18:16.473 に答える