私はタイヤ ジェムを使用しており、非常に興味深い機能 (custom_filters_score) を見つけました。custom_filters_score を使用すると、動的に計算されるスコアでソートされた検索結果を表示できます。
私の(ほとんど;-))唯一の問題は、次のクエリです:
days = ['2013-01-17', '2013-01-18', '2013-01-19']
Tire.search 'hotels' do
query do
custom_filters_score do
query { string '*' }
filter do
filter :match_all
script "doc['my_score'].value"
end
filter do
filter :terms, 'prices.date' => days#, :minimum_match => days.size
script "100 + doc['my_score'].value"
end
score_mode 'multiply'
end
end
end
すべてのホテルは、特定の日の価格のコレクションを持つことができます。上記のクエリでは、最初に、要求された日ごとに価格が指定されているすべてのホテルが表示されます (「days」配列を参照)。そして、すべての価格を指定する必要のない他のホテルを取得する必要があります。
現時点では、正しく動作していません。リクエストされた特定の日のみ料金が設定されている最初のホテルを取得します。ここで minimum_match のようなものが役立つと思います。問題は、そのオプションを設定すると、クエリがまったく機能しないことです。取得しています: QueryParsingException、フィルターは [minimum_match] をサポートしていません
タイヤ/エラスティックサーチを使用して動作させるために必要なオプションをいくつか教えてください。
これは私が直面する最初の問題に過ぎないのではないかと心配しています...
価格コレクションは次の構造を持つことができます - 同じ日に大人 2 名と大人 1 名で異なる価格を設定できます。
{
"id":1,
"name":"Hotel Zamkowy",
"city":"Słupsk",
"my_score":5,
"prices":[
{
"allocation":1,
"price":79,
"adults":2,
"children":0,
"date":"2013-01-17"
},
{
"allocation":1,
"price":87,
"adults":2,
"children":0,
"date":"2013-01-18"
},
{
"allocation":1,
"price":98,
"adults":2,
"children":0,
"date":"2013-01-19"
},
{
"allocation":1,
"price":75,
"adults":2,
"children":0,
"date":"2013-01-20"
},
{
"allocation":1,
"price":55,
"adults":1,
"children":0,
"date":"2013-01-16"
},
{
"allocation":1,
"price":59,
"adults":1,
"children":0,
"date":"2013-01-17"
},
{
"allocation":1,
"price":67,
"adults":1,
"children":0,
"date":"2013-01-18"
},
{
"allocation":1,
"price":78,
"adults":1,
"children":0,
"date":"2013-01-19"
},
{
"allocation":0,
"price":55,
"adults":1,
"children":0,
"date":"2013-01-20"
}
]
}
割り当て数も重要です。基本的には、特定の日に、特定の大人と子供の組み合わせで利用可能な部屋数を示します。
要求された日の割り当てと価格がある最初のホテルを私に与えるためにelasticsearchを照会する方法は?
私はそれが理にかなっていることを願っています;)
ありがとう、マレク