SolR - 搜索房间可用性并按结果排序

时间:2012-10-17 07:19:52

标签: sorting solr

我正在尝试使用SolR和PHP实现一种酒店/旅馆搜索。对于任何可用空间,我在索引中存储一个新文档,其中包含有关住宿的相关信息以及包含availableFrom和availableTill日期的多值属性。针对SolR运行查询以在一定时间内获得所有房间不应该那么难,但是在排序方面我的大脑搞砸了......

我的目标是不仅显示可用的住宿,而且还显示所有住宿与目的地(国家/城市/地区)的一般过滤查询,并对这些结果进行排序,以便将所有可用房间分类到列表的开头

因此,从12月1日到12月5日在慕尼黑搜索房间,我希望得到以下结果:

  • A室(可用)
  • B室(可用)
  • C室(在给定时期内没有完全可用=>很高兴)
  • D室(根本不可用)

目前我正在运行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" />

干杯 - 斯文

2 个答案:

答案 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的额外过滤器的问题。

再次感谢您指出我正确的方向!