Búsqueda en Java por múltiples palabras clave

Tengo una lista de registros que contienen información sobre el país, la ciudad, el distrito y el nombre del edificio (más de 50,000 registros) donde el nombre del edificio es único para cada registro.

Quiero buscar edificio, distrito y ciudad. Pero quiero obtener una lista de ciudades si paso el país a un método, por ejemplo, get (String country). O bien, obtenga una lista de distritos si paso país y ciudad al método, por ejemplo, get (String country, String city).

¿Hay alguna colección / biblioteca / estructura de datos existente para hacer algo como esto? Estoy pensando en una estructura / mapa similar a un árbol. Intenté MultiKeyMap, pero no devuelve una lista de valores y no es seguro para subprocesos. Además, no quiero usar la base de datos para hacer esto.

Gracias de antemano por tu ayuda.

Respuesta 1

SolR podría hacer el trabajo que busca :

Solr es la popular y rápida plataforma de búsqueda empresarial de código abierto del proyecto Apache Lucene. Sus características principales incluyen una potente búsqueda de texto completo, resaltado de resultados, búsqueda por facetas, agrupación dinámica, integración de bases de datos, manejo de documentos enriquecidos (por ejemplo, Word, PDF) y búsqueda geoespacial. Solr es altamente escalable, proporciona búsqueda distribuida y replicación de índices, y potencia las funciones de búsqueda y navegación de muchos de los sitios de Internet más grandes del mundo ...

Debería permitirle crear consultas que a su vez le permitirán buscar en sus registros.

También puede interactuar con SolR a través de Solrj :

Solrj es un cliente java para acceder a solr. Ofrece una interfaz java para agregar, actualizar y consultar el índice solr.

Respuesta: 2

Puedes usar HashMap como

HashMap<country,HashMap<City,HashMap<district,HashMap<building,value>>>>
Respuesta: 3

Puedes echar un vistazo a Apache's Commons CollectionUtils . Tiene un método "select" que hace lo que quieres.

Respuesta: 4

Un tipo de manera poco convencional puede usar archivos .properties para cada país para referirse a un subconjunto de localidades en cada una de sus propias propiedades. Otro puede ser un sistema de jerarquía de clases con una clase "nueva" instanciada de base, por ejemplo, GeographicLocation con un constructor que recibe un índice para cargar una clase abstracta que indica una Región o trae una lista de regiones si no se indica llamando a uno de los dos métodos sobrecargados y que a su vez carga automáticamente la siguiente capa de ciudad de clase abstracta por encima de eso.

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

He encontrado una excepción críptica al ejecutar inserciones de dinamo en la nube, ¿alguna ayuda o pistas sobre cómo depurar dicho error? Antecedentes El código que estoy ejecutando: Inserta con éxito los datos en ...

Me gustaría construir un monitor de aplicación simple para mi aplicación GAE que me envíe correos electrónicos cuando llegue a ciertos marcadores (80%, 85%, 90%, 95%, 98% y 100%) de mi límite de facturación. Por lo tanto, si mi límite de facturación para un ...

El objetivo es escribir un código que invierta los elementos de una lista con la ayuda de la recursividad. public static List <Integer> reverse (List <Integer> input) {if (input.isEmpty ()) {...

No puedo encontrar la sintaxis correcta de la siguiente consulta en Java, por favor, ayúdenme. String st = "SELECT COUNT ('" + id + "') FROM '" + selected_table + "'"; String st = "SELECT COUNT ('" + id + "') FROM '" + ...