我正在尝试使用SolR和PHP实现一种酒店/旅馆搜索。对于任何可用空间,我在索引中存储一个新文档,其中包含有关住宿的相关信息以及包含availableFrom和availableTill日期的多值属性。针对SolR运行查询以在一定时间内获得所有房间不应该那么难,但是在排序方面我的大脑搞砸了......
我的目标是不仅显示可用的住宿,而且还显示所有住宿与目的地(国家/城市/地区)的一般过滤查询,并对这些结果进行排序,以便将所有可用房间分类到列表的开头
因此,从12月1日到12月5日在慕尼黑搜索房间,我希望得到以下结果:
目前我正在运行SolR 3.6,但如果需要可以切换到新的4.0。
Solr-Guru有什么建议吗? 任何帮助表示赞赏: - )
-edit -
我认为Samuele把我推向了正确的方向。所以现在的问题是,如何创建一个能够按可用性排序的函数查询。也许有更好的方法来存储我的文档,即更改我的schema.xml?
这是一段摘录:
<field name="recordId" type="string" indexed="true" stored="true" />
<field name="language" type="int" indexed="true" stored="true" />
<field name="name" type="string" indexed="true" stored="false" />
<field name="maxPersons" type="int" indexed="true" stored="false" />
<field name="avgPrice" type="tdouble" indexed="true" stored="false" />
<field name="city" type="freetext" indexed="true" stored="false" />
<field name="district" type="freetext" indexed="true" stored="false" />
<field name="country" type="freetext" indexed="true" stored="false" />
<field name="availableFrom" type="date" indexed="true" stored="true" multiValued="true" />
<field name="availableTill" type="date" indexed="true" stored="true" multiValued="true" />
干杯 - 斯文
答案 0 :(得分:1)
好吧,你必须根据字段“房间”(或可用性,取决于你)来提升你的查询,并根据价值给出不同的分数
快速示例:
让我们给一个可用空间提升20,部分可用提升10并且不能提升1(只是为了确定)
你的查询(url-wise,我不知道solr的php接口)需要像
这样的东西<query>&bq=rooms:avail^20.0&bq=rooms:part-avail^10.0...
建议:如果你使用的是dismax查询处理程序,那就会让人上瘾。这意味着你必须添加一个更大的提升(例如2000而不是20),因为它将提升值添加到查询分数
另外,你应该从solr wiki检查this link,这比任何解释都要好。
答案 1 :(得分:0)
好吧,我在这里做了一些研究和测试...我的问题的当前和可能的最佳解决方案是对SolR执行多个查询。正如Samuele所建议的那样,我在两个步骤中查询SolR所有符合给定标准和时间跨度的住宿。
1:让所有房间都匹配并可用(包括部分可用的房间) 2:获取所有不可用的房间
第二个查询显然只在我们需要显示更多结果的分页cos时才会执行。
之后,对步骤1的所有结果进行后处理,以确定它们是否在整个请求的时间范围内可用。
进一步的“改进”是在模式中引入一个新字段:availableDay。对于每个可预订的日期,将有该日期的条目。这会将第一个查询分成两个单独的查询。这只是SolR的额外过滤器的问题。
再次感谢您指出我正确的方向!