2015-05-07 30 views
0

我剛剛開始使用Elastic Search(link)來處理Laravel 5中的所有搜索功能。我將Laravel 5與MySQL一起用於數據存儲和「elasticsearch/elasticsearch」:「 〜1.0「放入我的composer.json文件中,然後在每次模型發生更改時更新彈性搜索索引(this article was very helpful for setting up Laravel observers)模型觀察員。將彈性搜索結果轉換爲Laravel 5 Collection

我可以成功查詢我的數據並獲得我想要的結果,但我想將結果轉換回Laravel模型集合,以便我可以使用Laravel的關係在搜索結果視圖中顯示更多數據。

例如:我查詢了Elastic Search包含單詞「cat」的文章列表,並收到了帶有一系列匹配的典型響應。我想將這個數組轉換回Laravel文章集合,然後我可以使用文章的關係來獲取並顯示所有關聯的評論。

我知道,有幾個Laravel軟件包可能會聲稱使這更容易,但我需要做一些非常複雜的搜索/過濾,我想堅持官方elasticsearch/elasticsearch包,如果可能的話。

有什麼建議嗎?

+1

我一點兒也不熟悉elasticsearch,但我想如果我能幫助你的腦力激盪你可能找到答案。如果elasticsearch返回一個ID數組,你可以在'Article :: whereIn('id',$ elasticsearch_ids) - > with('comments') - > get()''中使用彈性搜索結果來檢索一個正常的雄辯模型。當然這也會導致運行兩個額外的查詢,所以它可能並不理想。 – Azeame

+1

@Azeame,這將是一個很好的解決方案,但它會失去集合的順序/排名。 – BakerStreetSystems

回答

1

使用像ElasticSearch這樣的NoSQL數據庫的好處就會消失。

也許你可以做的是在ES中存儲每篇文章的最新更新評論,但是當你只想顯示一篇文章時,你會選擇MySQL版本。

文章模型可能看起來像這樣。

{ 
"id": 1, 
"title": "Lorem" 
"comments" { 
    { 
     "id": 1 
     "message": "First comment" 
    }, 
    { 
     "id": 2 
     "message": "Second comment" 
    } 
} 
} 

使不睦意義,我檢索ES只有ID稍後從SQL虎視眈眈的熱電元件

+0

我想知道是否可能是這種情況......我可能會走這條路。我只是喜歡使用內置的Laravel關係(以及後續的內置Laravel函數),這樣更好:-) – BakerStreetSystems

+0

確切地說,創建一個觀察者,使用相關模型填充彈性搜索,一旦創建或更新,就可以獲取所有數據1個電話。 – Borjante

+0

我也建議走這條路。對於列表 - 使用ElasticSearch。用於顯示單個項目 - 使用所有關係進行有說服力的版本。 在我的情況下 - 我在ES索引中存儲的也是一些關係的計數(評論數量,子項數量等)。這在評分中也很有用;) –