1

国、都市、地区、および建物名の情報 (50,000 件を超えるレコード) を含むレコードのリストがあり、建物名はすべてのレコードで一意です。

建物、地区、市区町村を検索したい。しかし、get(String country) などのメソッドに国を渡すと、都市のリストを取得したいと考えています。または、get(String country, String city) のように国と都市をメソッドに渡すと、地区のリストを取得できます。

このようなことを行うための既存のコレクション/ライブラリ/データ構造はありますか? 木のような構造・地図を考えています。MultiKeyMap を試しましたが、値のリストが返されず、スレッドセーフではありません。また、これを行うためにデータベースを使用したくありません。

よろしくお願いします。

4

5 に答える 5

1

SolRは、あなたが求めている仕事をするかもしれません:

Solr は、Apache Lucene プロジェクトによる人気のある超高速オープン ソース エンタープライズ検索プラットフォームです。その主な機能には、強力な全文検索、ヒットの強調表示、ファセット検索、動的クラスタリング、データベース統合、リッチ ドキュメント (Word、PDF など) の処理、および地理空間検索が含まれます。Solr は非常にスケーラブルで、分散検索とインデックス レプリケーションを提供し、世界最大のインターネット サイトの多くで検索機能とナビゲーション機能を強化しています...

クエリを作成して、レコードを検索できるようにする必要があります。

Solrj を介してSolRとやり取りすることもできます。

Solrj は、solr にアクセスするための Java クライアントです。solr インデックスを追加、更新、およびクエリするための Java インターフェイスを提供します。

于 2012-07-26T05:53:30.563 に答える
1

HashMap を次のように使用できます

HashMap<country,HashMap<City,HashMap<district,HashMap<building,value>>>>
于 2012-07-26T05:55:48.557 に答える
0

風変わりな方法として、各国の .properties ファイルを使用して、建物を含む .properties ファイルを参照する都市を参照するために、.properties を含むそれぞれの .properties 内の地域のサブセットを参照することがあります。もう 1 つは、ベース インスタンス化された「新しい」クラスを持つクラス階層システムである可能性があります。たとえば、GeographicLocation には、リージョンを示す抽象クラスをロードするためのインデックスが与えられるか、2 つのうちの 1 つを呼び出すことによって示されない場合はリージョンのリストが返されます。メソッドがオーバーロードされ、その上に city の次の抽象クラス レイヤーが自動的に読み込まれます。

Inside GeographicLocation class ....
CountryMap cntry = (CountryMap)this();
RegionMap rgion = (RegionMap)cntry;
CityMap cty = (CityMap)rgion;
....e.t.c.
于 2012-07-26T06:25:26.310 に答える
0

単純に 3 つのハッシュテーブル (例: タイプ) を使用しない理由HashMap<String, List<Record>>: 建物をキーとするもの、都市をキーとするもの、地区をキーとするもの。確かに、約 3 倍のメモリを使用することになります。しかし、50,000 レコードは実際にはそれほど多くありません。さらに、ルックアップは非常に高速かつシンプルになります。これを試して、どのように機能するかを確認することをお勧めします。

于 2012-07-26T22:18:18.750 に答える
0

Apache の Commons CollectionUtilsをご覧ください。必要なことを行う「選択」メソッドがあります。

于 2012-07-26T05:55:02.513 に答える