2014-09-25 44 views
0

這個問題也許是一個奇怪的問題,但我的僱主要求我找出答案,因此我會。使用solr索引外部休息API,可能嗎?

在我們的應用程序中,我們使用外部REST API來搜索一些數據。這個REST api可以提供多種類型的數據,但是一次只能查找一種類型的數據。例如城市名稱和街道名稱。在我們的應用程序中,我們強制用戶選擇要搜索的數據類型,但現在我們的用戶不想這樣做。因此,如果他們搜索「洛杉磯」的例子,他們希望結果包含「洛杉磯」和「失落的街道」。爲了使我們現在能夠做到這一點,我們必須在REST API中進行兩次單獨的搜索併合並結果。

因此,相反,我的僱主已經閱讀了關於Solr的內容,並堅信可以對REST API進行索引,以便我們使用Solr來搜索我們想要的一個搜索請求。我不太確定。這是否可行,並且是否可行?

+0

請參閱http://stackoverflow.com/questions/8294337/how-can-i-search-all-field-in-solr-that-c​​ontain-the-keywords我認爲這兩個答案都解決您的問題。 – orangepips 2014-09-29 01:46:50

回答

0

是的,當然可以爲上述要求提出解決方案。基本上solr是一個全文搜索引擎,默認情況下所有的字段在solr中被索引。可以通過分析器和標記器組合在這些字段上執行不同類型的操作。您可以將所有可搜索字段映射到一個特定字段(稱爲複製字段,即城市名稱和街道名稱 - >文本名稱),然後在該字段上執行搜索以根據需要獲取結果。

solr是RESTful搜索引擎,它以xml和可選的JSON格式提供數據。它是一個真正有用的平臺,可以處理龐大的數據,並且不會像計算那樣幫助分析部分。

很少的好處包括自動提示,高亮,面,同義詞搜索,正克搜索,自動校正等

+0

但Solr必須從REST API索引搜索結果,對吧?所以基本上我們必須根據以前的搜索建立我們自己的文檔數據庫。如果不清楚,REST API不是我們的,我們不能直接訪問它提供的數據。 – benbjo 2014-09-25 12:48:32

+0

是的,確切地說。您必須從您的休息API中捕獲數據,並在每個常規插頁中將其提供給solr引擎。 – 2014-09-26 04:42:18

0

我想你應該發送的功能要求REST API維護者支持複合搜索。

您可以從REST API下載整個數據庫並創建自己的數據庫,您可以使用自定義查詢編制索引和搜索數據庫,並且必須與REST API保持同步。我不認爲你想這樣做。它可以工作,但所謂的REST API通常不會將客戶端與執行鏈接和語義註釋的服務分開。所以恐怕API的任何改變都會很容易中斷。

Afaik Solr是一種支持全文搜索並具有REST接口的存儲解決方案。

Solr是一個具有類似REST的API的獨立企業搜索服務器。 您通過HTTP,通過XML,JSON,CSV或 二進制文件將文檔(稱爲「索引」)。您可以通過HTTP GET查詢並接收XML,JSON,CSV 或二進制結果。

0

一旦實際擁有數據,您應該毫無困難地使用數據導入處理程序(DIH),Solr的RESTful接口或類似Spring Data Solr的方式將數據從REST API發佈到Solr。棘手的部分是如何「抓取」第三方REST API數據?

取決於REST API提供程序是否允許您按照時間順序或按字母順序對數據進行分頁,您可以在Solr之外編寫一個程序來輪詢REST API,然後將數據存儲在本地數據庫中然後將其發佈到Solr。如果REST API提供程序允許您在特定時間之後檢索更新的新記錄或更改的記錄,這樣會更容易,因此您的輪詢是有效的,並且只在初始完整索引後檢索少量數據。一些REST提供程序允許使用webhook來通知您的應用程序他們已經在其API中更新了數據。根據數據量以及是否可以通過用戶帳戶等限制它僅包含您所需的數據,這可能也可能不可行。

將第三方數據存儲在Solr外的本地數據庫中很重要,因爲Solr的索引數據文件是易失性的,有時在進行配置更改後需要刪除。這樣,您可以編寫一個流程,將數據庫中的數據重新發布到Solr,而無需再次抓取REST API。

爲了定期處理輪詢,你可以使用像Apache Camel或Spring Integration和Quartz Scheduler一樣的東西。這兩個都支持REST端點,您還可以查看Solr附帶的DIH示例。

相關問題