0

コマンドラインから直接クエリを実行すると非常にうまく機能する標準のJSON形式のクエリがあります。jsonは次のとおりです。

{"fields" : ["id"],
 "query":{
    "bool":{
      "must":[
        {
          "custom_score" : {
              "query" : {
                "bool" : {
                  "should" : [
                    {
                      "term" : {"a.in.group" : "abcd"}
                    },
                    {
                      "term" : {"a.in.group": "ALL"}
                    }
                   ]
                 }
              },
            "boost" : 1.0,
            "script" : "_score"
            }
        },

        {
          "custom_score" : {
              "query" : {
                "bool" : {
                  "should" : [
                    {
                      "term" : {"b.in.prefix" : pre}
                    },
                    {
                      "term" : {"b.in.group" : "abc"}
                    }
                   ]
                 }
              },
            "boost" : 1.0,
            "script" : "_score"
            }
        }
       ]
      }
    }
}

これにより、希望どおりの結果が得られます。

curl -X GET "localhost:9200/test/rule/_search" -d @query.json
{"took":6,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":2.3251607,"hits":[{"_index":"memphis","_type":"rule","_id":"1","_score":2.3251607,"fields":{"id":1}}]}}

しかし、同等のタイヤクエリに適したシンテックスを見つけることができません。私は試した:

s=Tire.search('test/rule') do
    query do
        boolean do
            must [
                query do
                    boolean do
                        should { string "a.in.group:abcd" }
                        should { string "a.in.group:ALL" }
                    end
                end
                query do
                    boolean do
                        should { string "b.in.prefix:pre" }
                        should { string "b.in.group:abc" }
                    end
                end
            ]
        end
    end

    fields :id
end

しかし、これは私に構文エラーを与えています:

ruby -c query.rb 
query.rb:7: syntax error, unexpected keyword_do_block, expecting ']'
query.rb:19: syntax error, unexpected ']', expecting keyword_end
query.rb:46: syntax error, unexpected $end, expecting keyword_end

他のフォーラムでは助けが見つかりませんでした。mustブロックに複数のクエリを入れようとすると問題が発生します。助けてください。

前もって感謝します

-アジタブ

4

1 に答える 1

2

これでうまくいくかどうかを確認してください。

s = Tire.search 'test/rule' do
    query do
      boolean do
          must do
              custom_score :boost => 1.0, :script => "_score" do
                boolean do
                    should { term 'a.in.group', "abcd" }
                    should { term 'a.in.group', "ALL" }
                end
              end
          end
          must do
              custom_score :boost => 1.0, :script => "_score" do
                boolean do
                    should { term 'b.in.prefix', pre }
                    should { term 'b.in.group', "abc" }
                end
              end
          end
      end
    end
    fields :id
end
于 2012-08-21T21:12:07.580 に答える