2012-07-26 106 views
1

我有一個包含國家,城市,地區和建築物名稱信息(超過50,000條記錄)的記錄列表,其中建築物名稱對於每條記錄都是唯一的。Java通過多個關鍵字搜索

我想搜索建築物,地區&城市。但是,如果我通過一個國家的方法,我想獲得一個城市的名單,例如,得到(String國家)。或者,如果我通過國家和城市的方法,例如獲得地區列表,得到(String country,String city)。

是否有任何現有的集合/庫/數據結構來做這樣的事情?我正在考慮樹狀結構/地圖。我嘗試了MultiKeyMap,但它不返回值列表,也不是線程安全的。另外,我不想使用數據庫來做到這一點。

在此先感謝您的幫助。

回答

1

SolR可以做你以後的工作:

Solr的是流行的,速度極快的開源企業搜索 從Apache Lucene項目的平臺。它的主要功能包括: 強大的全文搜索,點擊高亮顯示,分面搜索,動態 聚類,數據庫集成,豐富的文檔(例如Word,PDF) 處理和地理空間搜索。 Solr的是高度可擴展性,提供 分佈式搜索和索引複製,並且它的權力的搜索和許多世界上最大的互聯網網站的 導航功能...

它應該讓你創建查詢這將反過來允許您搜索您的記錄。

您可以通過SOLR也Solrj互動:

Solrj是一個Java客戶端訪問Solr的。它提供了一個到 的java接口添加,更新和查詢solr索引。

1

您可以使用HashMap的像

HashMap<country,HashMap<City,HashMap<district,HashMap<building,value>>>> 
+0

這是一個簡單的方法。但是這會使整個結構非常大嗎?我恐怕如果我把所有50,000條記錄放在它裏面,它可能會消耗大量的內存.... – Coolmore 2012-07-26 08:03:30

0

也許使用.properties文件每個國家的方式的斷拍類型指的是他們在每個自己的.properties地區的一個子集,再次含有氨基酸的.properties來引用涉及包含建築物的.properties文件的城市。 另一個可以是具有基本實例化的「新」類的類層次結構系統,例如帶有一個構造函數的GeographicLocation,該構造函數提供一個索引來加載指示區域的抽象類,或者如果未通過調用兩個方法中的一個重載並且隨後自動加載城市的下一個抽象類層那是最重要的。

Inside GeographicLocation class .... 
CountryMap cntry = (CountryMap)this(); 
RegionMap rgion = (RegionMap)cntry; 
CityMap cty = (CityMap)rgion; 
....e.t.c. 
+0

這似乎有點複雜。你能解釋一下嗎? – Coolmore 2012-07-26 08:09:58

0

爲什麼不乾脆用三個哈希表(例如類型HashMap<String, List<Record>>的):一個建築物鍵,增城市一個鍵和一個由區鍵。當然,你會使用大約三倍的內存;但是50,000條記錄真的沒有那麼多。此外,查找將非常快速和簡單。我建議嘗試一下,看看它是如何執行的。