【问题标题】:Java Search by multiple keywordsJava 按多个关键字搜索
【发布时间】:2012-07-24 16:14:07
【问题描述】:

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

我想搜索建筑物、地区和城市。但是如果我将国家传递给一个方法,我想得到一个城市列表,例如获取(字符串国家)。或者,如果我将国家和城市传递给该方法,则获取地区列表,例如获取(字符串国家,字符串城市)。

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

提前感谢您的帮助。

【问题讨论】:

    标签: java search data-structures collections


    【解决方案1】:

    SolR 可能会完成您的工作:

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

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

    您也可以通过Solrj与SolR互动:

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

    【讨论】:

      【解决方案2】:

      你可以看看Apache's CommonsCollectionUtils。它有一个“选择”方法,可以做你想做的事。

      【讨论】:

        【解决方案3】:

        你可以像这样使用HashMap

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

        【讨论】:

        • 这是一个简单的方法。但这会使整个结构变得非常大吗?恐怕如果我把所有 50,000 条记录都放在里面,它可能会消耗大量内存....
        【解决方案4】:

        一种另类的方式可能是使用每个国家/地区的 .properties 文件来引用他们自己的 .properties 中的地方子集,该子集再次包含一个 .properties 来引用引用包含建筑物的 .properties 文件的城市。 另一个可能是具有基实例化的“新”类的类层次系统,例如GeographicLocation 带有一个构造函数,该构造函数被提供一个索引以加载一个指示区域的抽象类,或者如果没有通过调用重载的两个方法之一来指示则带回一个区域列表,然后自动加载城市的下一个抽象类层最重要的是。

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

        【讨论】:

        • 这似乎有点复杂。你能解释一下吗?
        【解决方案5】:

        为什么不简单地使用三个哈希表(例如HashMap&lt;String, List&lt;Record&gt;&gt; 类型):一个由建筑物键控,一个由城市键控,一个由区键控。当然,您将使用大约三倍的内存;但 50,000 条记录确实不算多。此外,查找将非常快速和简单。我建议您尝试一下,看看效果如何。

        【讨论】:

          猜你喜欢
          • 2015-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-13
          • 2013-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多