热门为使用轮胎的custom_filters_score的术语过滤器设置minimum_match?

时间:2012-12-17 16:47:52

标签: elasticsearch tire

我正在使用轮胎宝石,发现了非常有趣的功能 - 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,filter不支持[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以便为我提供第一个酒店,这些酒店具有所请求日期的分配和价格?

我希望它有意义;)

谢谢, 马立克

1 个答案:

答案 0 :(得分:1)

您应该使用:range而不是:term。类似的东西:

:范围=> {'prices.date'=> {:gte => lower_price,:lt => higher_price}}