1

私はタイヤ ジェムを使用しており、非常に興味深い機能 (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を照会する方法は?

私はそれが理にかなっていることを願っています;)

ありがとう、マレク

4

1 に答える 1

1

:term の代わりに :range を使用する必要があります。これに似たもの:

:range=> { 'prices.date' => { :gte => 低価格 , :lt => 高価格 }}

于 2013-05-03T10:32:59.200 に答える