我正在使用轮胎宝石并发现非常有趣的功能 - 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]
你能否给我一些提示,我必须使用轮胎/弹性搜索来让它工作吗?
恐怕这只是我遇到的第一个问题......
价格集合可以具有以下结构 - 我们可以为 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给我第一家有请求天分配和价格的酒店?
我希望这是有道理的;)
谢谢,马雷克