elasticsearch - 是否热衷于使用轮胎在custom_filters_score的条件过滤器上设置minimum_match?

标签 elasticsearch tire

我正在使用轮胎 gem ,发现了一个非常有趣的功能-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

每个酒店都可以指定日期的价格集合。上面的查询应该给我首先我所有在每个请求的日期指定了价格的酒店(请参阅“天”数组)。然后我应该得到其他酒店,这些酒店不需要指定所有价格。

目前,它无法正常工作。我得到的第一家酒店仅在某些要求的日子里才有价格。
我认为诸如minimum_match之类的内容可能会对您有所帮助,问题是当我设置该选项时,查询根本无法正常工作。我得到:QueryParsingException,过滤器不支持[minimum_match]

您能否给我一些提示,我必须使用轮胎/ elasticsearch使它工作的哪些选择?

恐怕这只是我遇到的第一个问题...

价格收集可以具有以下结构-我们可以为同一天的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"
    }
  ]
}

分配数量也很重要,它基本上告诉我们特定日期和特定成人/ child 组合有多少可用房间。

如何查询elasticsearch给我的首批酒店有所请求日期的分配和价格?

我希望这是有道理的;)

谢谢,
马雷克

最佳答案

您应该使用:range而不是:term。类似于以下内容:
:range => {'prices.date'=> {:get =>较低价格,:lt =>较高价格}}

关于elasticsearch - 是否热衷于使用轮胎在custom_filters_score的条件过滤器上设置minimum_match?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918331/

相关文章:

elasticsearch - 重写多项查询时,请在每个项(而不是整个查询)中添加constant_score

ruby-on-rails - Tire Elastic中的自定义分析器无法与Mongoid一起使用

ruby-on-rails - 协会中的Rails轮胎搜索has_many

database - 删除 Elasticsearch 索引而不删除其映射

ruby-on-rails - 在我的index.html.erb中为nil:NilClass获取未定义的方法 `each'

java - 获取不同字段和排序的 Elasticsearch java api 查询

elasticsearch - Elasticsearch-过滤器不起作用

elasticsearch - Elasticsearch 返回错误结果

elasticsearch - ElasticSearch按地理位置值或空值过滤

ruby-on-rails - 如何在ElasticSearch中提升查询取决于属性的值?