Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多关键字搜索_Java_Search_Data Structures_Collections - Fatal编程技术网

Java多关键字搜索

Java多关键字搜索,java,search,data-structures,collections,Java,Search,Data Structures,Collections,我有一个记录列表,其中包含国家、城市、地区和建筑物名称信息(超过50000条记录),其中建筑物名称对于每个记录都是唯一的 我想搜索大厦、地区和城市。但是如果我将国家传递给一个方法,例如get(String country),我想得到一个城市列表。或者,如果我将country和city传递给方法,则获取一个地区列表,例如get(String country,String city) 是否有任何现有的集合/库/数据结构可以执行类似的操作?我正在考虑一个树状结构/地图。我尝试了MultiKeyMap,

我有一个记录列表,其中包含国家、城市、地区和建筑物名称信息(超过50000条记录),其中建筑物名称对于每个记录都是唯一的

我想搜索大厦、地区和城市。但是如果我将国家传递给一个方法,例如get(String country),我想得到一个城市列表。或者,如果我将country和city传递给方法,则获取一个地区列表,例如get(String country,String city)

是否有任何现有的集合/库/数据结构可以执行类似的操作?我正在考虑一个树状结构/地图。我尝试了MultiKeyMap,但它不返回值列表,而且它不是线程安全的。另外,我不想用数据库来做这件事

提前感谢您的帮助。

可能会完成您想要的工作:

Solr是流行的、快速的开源企业搜索引擎 来自ApacheLucene项目的平台。其主要特点包括 强大的全文搜索、点击突出显示、分面搜索、动态 集群、数据库集成、富文档(例如Word、PDF) 处理和地理空间搜索。Solr具有高度可扩展性,提供 分布式搜索和索引复制,它支持搜索和索引复制 世界上许多最大的互联网网站的导航功能

它应该允许您创建查询,从而允许您搜索记录

您还可以通过以下方式与SolR交互:

Solrj是访问solr的java客户端。它为用户提供了一个java接口 添加、更新和查询solr索引


你可以看看。它有一个“select”方法,可以执行您想要的操作。

您可以像

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

一种非常规的方式可能是使用每个国家的.properties文件来引用各自.properties中的一部分地区,其中再次包含a.properties以引用包含建筑物的.properties文件的城市。 另一个可能是具有基实例化“new”的类层次结构系统类,例如,带有构造函数的GeographicLocation,该构造函数提供一个索引,以加载一个表示某个区域的抽象类,或者如果没有通过调用两个重载方法中的一个来表示,则返回一个区域列表,然后自动加载城市顶部的下一个抽象类层

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

为什么不简单地使用三个哈希表(例如,类型为
HashMap
):一个按建筑物键控,一个按城市键控,一个按地区键控。当然,您将使用大约三倍的内存;但50000张唱片其实并不多。此外,查找将非常快速和简单。我建议您尝试一下,看看它的性能如何。

这是一种简单的方法。但这会使整个结构变得非常大吗?我担心如果我把所有50000条记录都放进去,它可能会消耗大量内存……这似乎有点复杂。你能再解释一下吗?