我正在嘗試使用SolR和PHP實現一種酒店/旅館搜索。對於任何可用房間,我在索引中存儲一個新文檔,其中包含關於包含availableFrom和availableTill日期的住宿和多值屬性的相關信息。對SolR運行查詢以在特定時間範圍內獲得所有房間不應該那麼困難,但是在分類時我的大腦會緊張起來......SolR - 搜索房間可用性和結果排序
我的目標是不僅顯示可用住宿,而且顯示所有住宿它們與目的地(國家/城市/地區)上的常規過濾器查詢匹配,並對這些結果進行排序,以便將所有可用房間排序到列表的開頭。
因此,對於在慕尼黑的房間從12月1日至'12 12月5日的搜索,我想獲得這樣的結果:
- 房A(提供)
- 房B(可用)
- 房C(不完全地在一定時期內獲得=>不錯的)
- 室d(不可用在所有)
目前我運行SolR 3.6,但如果需要可以切換到新的4.0。
有沒有Solr-Guru對我有一些建議? 任何幫助表示讚賞:-)
CNC中
我覺得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" />
乾杯 - 斯文
這並不意味着我必須將文檔添加到我的索引中的任何可能的旅行日期嗎? 如上所述,每個房間都有一份文件,本文件包含每個可預訂期間的多個從/到期日期。 – Sven
我不認爲,你首先運行你的正常查詢(在一定的時間範圍內的所有房間),然後你使用你的推進值排序參數。只需檢查我的代碼,我也是這樣做的:如果一個值出現在一個確定的字段中,那麼這個字段對它有很大的幫助。使用php(或python,在我的情況下)應該可以幫助您更好地優化查詢(例如:使用if語句來決定是否以及要增強什麼等) –
運行初始查詢和篩選時間範圍只會顯示可用的房間。刪除此過濾器可能會導致返回非常大量的文檔。運行查詢時可以隨時創建「可用」字段並使用它來提高分數嗎?像「完全可用」^ 100「部分可用」^ 50「不可用」^ 1?或者是否可以讓SolR返回不匹配查詢的文檔?我覺得sortMissingLast在這裏可能會有所幫助... – Sven