List of usage examples for org.apache.lucene.search BooleanQuery setMaxClauseCount
public static void setMaxClauseCount(int maxClauseCount)
From source file:edu.unika.aifb.graphindex.storage.lucene.LuceneIndexStorage.java
License:Open Source License
public void initialize(boolean clean, boolean readonly) { m_readonly = readonly;//from ww w .j a v a2s.c o m try { if (!m_readonly) { m_writer = new IndexWriter(FSDirectory.getDirectory(m_directory), new WhitespaceAnalyzer(), clean, MaxFieldLength.UNLIMITED); m_writer.setRAMBufferSizeMB(Runtime.getRuntime().maxMemory() / 1000 / 1000 / 20); // m_writer.setMergeFactor(30); log.debug("IndexWriter ram buffer size set to " + m_writer.getRAMBufferSizeMB() + "MB"); } m_reader = IndexReader.open(FSDirectory.getDirectory(m_directory), true); m_searcher = new IndexSearcher(m_reader); m_docCache = new LRUCache<Integer, Document>(5000); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BooleanQuery.setMaxClauseCount(4194304); }
From source file:edu.unika.aifb.graphindex.storage.lucene.LuceneTest.java
License:Open Source License
public static void main(String[] args) throws CorruptIndexException, LockObtainFailedException, IOException, StorageException, InterruptedException, ExecutionException { m_reader = IndexReader.open("/Users/gl/Studium/diplomarbeit/workspace/graphindex/output/lubm50/index"); m_searcher = new IndexSearcher(m_reader); BooleanQuery.setMaxClauseCount(2000000); List<Query> queries = new ArrayList<Query>(); BufferedReader in = new BufferedReader( new FileReader("/Users/gl/Studium/diplomarbeit/graphindex evaluation/lq7storagequeries.txt")); String input;//w w w . ja v a 2 s.co m while ((input = in.readLine()) != null) { queries.add(input.indexOf("*") < 0 ? new TermQuery(new Term("ext", input)) : new PrefixQuery(new Term("ext", input.replaceAll("\\*", "")))); } long start = System.currentTimeMillis(); // test2(queries); // System.out.println("t: " + (System.currentTimeMillis() - start)); // // start = System.currentTimeMillis(); // test3(queries); // System.out.println("t: " + (System.currentTimeMillis() - start)); // // start = System.currentTimeMillis(); // test4(queries); // System.out.println("t: " + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); test1(queries); System.out.println("t: " + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); test1a(queries); System.out.println("t: " + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); test5(queries); System.out.println("t: " + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); test5a(queries); System.out.println("t: " + (System.currentTimeMillis() - start)); }
From source file:edu.virginia.cs.model.BuildTopicModel.java
public BuildTopicModel() throws IOException { fiop = new FileOperations(); dictionary = new HashMap<>(); dictionaryWithTF = new HashMap<>(); BooleanQuery.setMaxClauseCount(2048); }
From source file:edu.virginia.cs.user.ReferenceModel.java
public ReferenceModel() { refModel = new HashMap<>(); queryTokens = new HashMap<>(); IDFRecord = new HashMap<>(); totalDocument = 0;//w ww. j av a 2 s.co m totalTokensCorpus = 0; SpecialAnalyzer analyzer = new SpecialAnalyzer(); parser = new QueryParser(Version.LUCENE_46, "", analyzer); BooleanQuery.setMaxClauseCount(2048); searcher = new Searcher(_indexPath); searcher.setSimilarity(new OkapiBM25()); }
From source file:edu.virginia.cs.user.UserProfile.java
public UserProfile() { uProfile = new HashMap<>(); IDFRecord = new HashMap<>(); loadIDFRecord("./data/AOL-Dictionary.txt"); totalTokens = 0;//from ww w.j a v a 2 s . c o m totalQuery = 0; totalQueryLength = 0; SpecialAnalyzer analyzer = new SpecialAnalyzer(); parser = new QueryParser(Version.LUCENE_46, "", analyzer); BooleanQuery.setMaxClauseCount(2048); }
From source file:es.pode.indexador.negocio.servicios.busqueda.SrvBuscadorServiceImpl.java
License:Open Source License
/** * Este metodo busca los documentos indexados que cumplen estar dentro del rango de fechas dado y que tengan el valor de licencia dado. * //from w w w . j a v a 2s . co m * @param licencia Licencia de la que se quiere saber el numero de documentos que la contiene. * @param fechaDesde Fecha desde del periodo en el que se esta interesado. * @param fechaHasta Fecha hasta del periodo en el que se esta interesado. * @param idioma Idioma en el que se esta interesado buscar. * @return ResultadosCountVO VO que alberga el resultado de la solicitud de la suma de documentos que cumplen la condicion. */ protected ResultadosCountVO handleBusquedaDocsLicenciaFecha(String licencia, Calendar fechaDesde, Calendar fechaHasta, String idioma) throws Exception { if (licencia == null || licencia.equals("")) { logger.error("Error buscando documentos con licencias. Licencia vacia."); throw new Exception("Error buscando documentos con licencias. Licencia vacia."); } if (idioma == null || idioma.equals("")) { logger.error("Error buscando documentos con licencias. Idioma de busqueda vacio."); throw new Exception("Error buscando documentos con licencias. Idioma de busqueda vacio."); } if (fechaDesde == null || fechaHasta == null) { logger.error("Error buscando documentos con licencias. Fechas desde[" + fechaDesde == null ? null : fechaDesde.toString() + "] y hasta[" + fechaHasta == null ? null : fechaHasta.toString() + "] vacias."); throw new Exception("Error buscando documentos con licencias. Fechas desde[" + fechaDesde == null ? null : fechaDesde.toString() + "] y hasta[" + fechaHasta == null ? null : fechaHasta.toString() + "] vacias."); } if (fechaDesde.after(fechaHasta)) { logger.error("Error buscando documentos con licencias. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); throw new Exception("Error buscando documentos con licencias. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); } BooleanQuery andQuery = new BooleanQuery(); // Configuramos el valor de memoria. andQuery.setMaxClauseCount(Integer.parseInt(props.getProperty("maxClauseCount"))); Calendar antes = Calendar.getInstance(); Calendar despues = Calendar.getInstance(); antes.setTime(fechaDesde.getTime()); despues.setTime(fechaHasta.getTime()); String antesS = "" + antes.get(Calendar.YEAR) + formatMonthMM((antes.get(Calendar.MONTH) + 1)) + formatDayDD(antes.get(Calendar.DAY_OF_MONTH)); String despuesS = "" + despues.get(Calendar.YEAR) + formatMonthMM((despues.get(Calendar.MONTH) + 1)) + formatDayDD(despues.get(Calendar.DAY_OF_MONTH)); logger.debug( "Buscando documentos con licencia[" + licencia + "] desde[" + antesS + "] hasta[" + despuesS + "]"); //aniadimos la query con el rango de fechas andQuery.add(getRangeQuery(props.getProperty(CAMPO_FECHA_PUBLICACION), antesS, despuesS), BooleanClause.Occur.MUST); //aniadimos la query con el id de la licencia // QueryParser parser = new QueryParser(props.getProperty(CAMPO_LICENCIA), new StandardAnalyzer()); // // el standar analyzer utiliza el StandardTokenizer gracias al cual elimina de la licencia los caracteres extranios // // para ver que caracteres tiene en cuenta al tokenizar:http://lucene.zones.apache.org:8080/hudson/job/Lucene-Nightly/javadoc/org/apache/lucene/analysis/standard/StandardTokenizer.html // Query licenciaQuery = parser.parse("\""+licencia+"\""); //tenemos en cuenta el texto entre comillas para que el parseo no se pierda. // // hemos convertido en tokens las palabras de la licencia // andQuery.add(getPhraseQuery(props.getProperty(CAMPO_LICENCIA), Arrays.asList(licencia.split(" "))),BooleanClause.Occur.MUST); andQuery.add(getTermQuery(props.getProperty(CAMPO_LICENCIA), licencia), BooleanClause.Occur.MUST); // andQuery.add(licenciaQuery,BooleanClause.Occur.MUST); // Utilizamos el idioma seleccionado en la busqueda para buscar el indice sobre el que se ejecuta la query. Directory directorioIndiceSimple = this.getIndexByLanguage(idioma); if (directorioIndiceSimple == null) { logger.error("Error buscando documentos con licencias. Indice para idioma[" + idioma + "] no accesible. Imposible buscar."); throw new Exception("Error buscando documentos con licencias. Indice para idioma[" + idioma + "] no accesible. Imposible buscar."); } Hits hits; try { IndexSearcher searcher = new IndexSearcher(directorioIndiceSimple); searcher.setSimilarity(new DefaultSimilarity()); hits = searcher.search(andQuery); } catch (Exception e) { logger.error("Error buscando documentos con licencias. Error buscando en indice[" + idioma + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception("Error buscando documentos con licencias. Error buscando en indice[" + idioma + "] con query[" + andQuery.toString() + "].", e); } ResultadosCountVO resultado = new ResultadosCountVO(); if (hits != null) resultado.setDocumentosCount(new Integer(hits.length())); else resultado.setDocumentosCount(new Integer(0)); return resultado; }
From source file:es.pode.indexador.negocio.servicios.busqueda.SrvBuscadorServiceImpl.java
License:Open Source License
/** * Este metodo busca los documentos que tienen fecha entre las fechas desde y hasta dados y que tengan el campo de arbol curricular * nodo coincidente con el identificador de nodo que le pasan. * Esto devuelve el numero de documentos indexados que estan catalogados exactamente en ese nodo de arbol curricular. * @param idNodo Identificador del nodo de arbol curricular del que se quiere averiguar el numero de documentos que tiene asociados. * @param fechaDesde Fecha desde del periodo en el que se esta interesado. * @param fechaHasta Fecha hasta del periodo en el que se esta interesado. * @param idioma Idioma en el que se esta interesado buscar. * @return ResultadosCountVO VO que alberga el resultado de la solicitud de la suma de documentos que cumplen la condicion. *///from w ww .j a v a2 s . co m protected ResultadosCountVO handleBusquedaDocsNodoFechaArbolCurricular(String idNodo, Calendar fechaDesde, Calendar fechaHasta, String idioma) throws Exception { if (idNodo == null || idNodo.equals("")) { logger.error("Error buscando nodo de arbol curricular. Nodo vacio."); throw new Exception("Error buscando nodo de arbol curricular. Nodo vacio."); } if (idioma == null || idioma.equals("")) { logger.error("Error buscando nodo de arbol curricular. Idioma de busqueda vacio."); throw new Exception("Error buscando nodo de arbol curricular. Idioma de busqueda vacio."); } if (fechaDesde == null || fechaHasta == null) { logger.error("Error buscando nodo de arbol curricular. Fechas desde[" + fechaDesde == null ? null : fechaDesde.toString() + "] y hasta[" + fechaHasta == null ? null : fechaHasta.toString() + "] vacias."); throw new Exception("Error buscando nodo de arbol curricular. Fechas desde[" + fechaDesde == null ? null : fechaDesde.toString() + "] y hasta[" + fechaHasta == null ? null : fechaHasta.toString() + "] vacias."); } if (fechaDesde.after(fechaHasta)) { logger.error("Error buscando nodo de arbol curricular. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); throw new Exception("Error buscando nodo de arbol curricular. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); } BooleanQuery andQuery = new BooleanQuery(); // Configuramos el valor de memoria. andQuery.setMaxClauseCount(Integer.parseInt(props.getProperty("maxClauseCount"))); Calendar antes = Calendar.getInstance(); Calendar despues = Calendar.getInstance(); antes.setTime(fechaDesde.getTime()); despues.setTime(fechaHasta.getTime()); String antesS = "" + antes.get(Calendar.YEAR) + formatMonthMM((antes.get(Calendar.MONTH) + 1)) + formatDayDD(antes.get(Calendar.DAY_OF_MONTH)); String despuesS = "" + despues.get(Calendar.YEAR) + formatMonthMM((despues.get(Calendar.MONTH) + 1)) + formatDayDD(despues.get(Calendar.DAY_OF_MONTH)); logger.debug( "Buscando nodo de arbol curricular[" + idNodo + "] desde[" + antesS + "] hasta[" + despuesS + "]"); //aniadimos la query con el rango de fechas andQuery.add(getRangeQuery(props.getProperty(CAMPO_FECHA_PUBLICACION), antesS, despuesS), BooleanClause.Occur.MUST); //aniadimos la query con el id del nodo andQuery.add(getTermQuery(props.getProperty(CAMPO_AREA_CURRICULAR_NODO), idNodo), BooleanClause.Occur.MUST); // Utilizamos el idioma seleccionado en la busqueda para buscar el indice sobre el que se ejecuta la query. Directory directorioIndiceSimple = this.getIndexByLanguage(idioma); if (directorioIndiceSimple == null) { logger.error("Error buscando nodo de arbol curricular. Indice para idioma[" + idioma + "] no accesible. Imposible buscar."); throw new Exception("Error buscando nodo de arbol curricular. Indice para idioma[" + idioma + "] no accesible. Imposible buscar."); } Hits hits; try { IndexSearcher searcher = new IndexSearcher(directorioIndiceSimple); searcher.setSimilarity(new DefaultSimilarity()); hits = searcher.search(andQuery); } catch (Exception e) { logger.error("Error buscando nodo de arbol curricular. Error buscando en indice[" + idioma + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception("Error buscando nodo de arbol curricular. Error buscando en indice[" + idioma + "] con query[" + andQuery.toString() + "].", e); } ResultadosCountVO resultado = new ResultadosCountVO(); if (hits != null) resultado.setDocumentosCount(new Integer(hits.length())); else resultado.setDocumentosCount(new Integer(0)); return resultado; }
From source file:es.pode.indexador.negocio.servicios.busqueda.SrvBuscadorServiceImpl.java
License:Open Source License
/** * Este metodo busca los documentos indexados que cumplan estar en el rango de valoraciones que le pasan dentro de las fechas desde y hasta. * @param nivelAgregacion Valor de valoracion. * @param fechaDesde Fecha desde del periodo en el que se esta interesado. * @param fechaHasta Fecha hasta del periodo en el que se esta interesado. * @param idioma Idioma en el que se esta interesado buscar. * @return ResultadosCountVO VO que alberga el resultado de la solicitud de la suma de documentos que cumplen la condicion. *///from w w w . j ava 2s . com protected ResultadosCountVO handleBusquedaDocsRangoFechaNivelAgregacion(String nivelAgregacion, Calendar fechaDesde, Calendar fechaHasta, String idioma) throws Exception { if (nivelAgregacion == null || nivelAgregacion.equals("")) { logger.error("Error buscando documentos con rango de valoracion. Nivel de agregacion vacio."); throw new Exception("Error buscando documentos con rango de valoracion. Nivel de agregacion vacio."); } if (idioma == null || idioma.equals("")) { logger.error("Error buscando documentos con rango de valoracion. Idioma de busqueda vacio."); throw new Exception("Error buscando documentos con rango de valoracion. Idioma de busqueda vacio."); } if (fechaDesde == null || fechaHasta == null) { logger.error( "Error buscando documentos con rango de valoracion. Fechas desde[" + fechaDesde == null ? null : fechaDesde.toString() + "] y hasta[" + fechaHasta == null ? null : fechaHasta.toString() + "] vacias."); throw new Exception( "Error buscando documentos con rango de valoracion. Fechas desde[" + fechaDesde == null ? null : fechaDesde.toString() + "] y hasta[" + fechaHasta == null ? null : fechaHasta.toString() + "] vacias."); } if (fechaDesde.after(fechaHasta)) { logger.error("Error buscando documentos con rango de valoracion. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); throw new Exception("Error buscando documentos con rango de valoracion. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); } BooleanQuery andQuery = new BooleanQuery(); // Configuramos el valor de memoria. andQuery.setMaxClauseCount(Integer.parseInt(props.getProperty("maxClauseCount"))); Calendar antes = Calendar.getInstance(); Calendar despues = Calendar.getInstance(); antes.setTime(fechaDesde.getTime()); despues.setTime(fechaHasta.getTime()); String antesS = "" + antes.get(Calendar.YEAR) + formatMonthMM((antes.get(Calendar.MONTH) + 1)) + formatDayDD(antes.get(Calendar.DAY_OF_MONTH)); String despuesS = "" + despues.get(Calendar.YEAR) + formatMonthMM((despues.get(Calendar.MONTH) + 1)) + formatDayDD(despues.get(Calendar.DAY_OF_MONTH)); logger.debug("Buscando documentos con nivel de agregacion[" + nivelAgregacion + "] desde[" + antesS + "] hasta[" + despuesS + "]"); //aniadimos la query con el rango de fechas andQuery.add(getRangeQuery(props.getProperty(CAMPO_FECHA_PUBLICACION), antesS, despuesS), BooleanClause.Occur.MUST); //aniadimos la query con la valoracion andQuery.add(getTermQuery(props.getProperty(CAMPO_NIVEL_AGREGACION), nivelAgregacion), BooleanClause.Occur.MUST); // Utilizamos el idioma seleccionado en la busqueda para buscar el indice sobre el que se ejecuta la query. Directory directorioIndiceSimple = this.getIndexByLanguage(idioma); if (directorioIndiceSimple == null) { logger.error("Error buscando documentos con rango de valoracion. Indice para idioma[" + idioma + "] no accesible. Imposible buscar."); throw new Exception("Error buscando documentos con rango de valoracion. Indice para idioma[" + idioma + "] no accesible. Imposible buscar."); } Hits hits; try { IndexSearcher searcher = new IndexSearcher(directorioIndiceSimple); searcher.setSimilarity(new DefaultSimilarity()); hits = searcher.search(andQuery); } catch (Exception e) { logger.error("Error buscando documentos con rango de valoracion. Error buscando en indice[" + idioma + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception("Error buscando documentos con rango de valoracion. Error buscando en indice[" + idioma + "] con query[" + andQuery.toString() + "].", e); } ResultadosCountVO resultado = new ResultadosCountVO(); if (hits != null) resultado.setDocumentosCount(new Integer(hits.length())); else resultado.setDocumentosCount(new Integer(0)); return resultado; }
From source file:es.pode.indexador.negocio.servicios.busqueda.SrvBuscadorServiceImpl.java
License:Open Source License
/** * Este metodo busca los ODEs indexados en todos los indices que cumplan las condiciones de busqueda que le pasan como parametro. * Las fechas desde y hasta se interpretan inclusives y en el caso de no estar presentes, sin limite superior o inferior. * @param paramBusq Parametros de busqueda. * @return ResultadoHeaderVO[] Array de VO's que albergan los resulados de la consulta en un contenedor de Headers. *//*from www. j a v a 2 s .c o m*/ protected es.pode.indexador.negocio.servicios.busqueda.ResultadoHeaderVO[] handleBusquedaHeadersRepositorio( ParamPeriodoRepositorioVO paramBusq) throws Exception { if (paramBusq == null) { logger.error("Error obteniendo las cabeceras del repositorio. No hay parametros de busqueda."); throw new Exception("Error obteniendo las cabeceras del repositorio. No hay parametros de busqueda."); } Date fechaDesde = (paramBusq.getDesde() != null ? paramBusq.getDesde().getTime() : null); Date fechaHasta = (paramBusq.getHasta() != null ? paramBusq.getHasta().getTime() : null); if (fechaDesde != null && fechaHasta != null && fechaDesde.after(fechaHasta)) { logger.error("Error obteniendo las cabeceras del repositorio. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); throw new Exception("Error obteniendo las cabeceras del repositorio. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); } // Obtenemos todos los indices sobre los que hay objetos IndiceVO[] indices = new IndiceVO[0]; try { indices = handleObtenerIdiomasBusqueda(); } catch (Exception e) { logger.error("Error obteniendo las cabeceras del repositorio. Imposible recuperar los indices.[" + e.getMessage() + "]"); throw new Exception("Error obteniendo las cabeceras del repositorio. Imposible recuperar los indices.", e); } // Para cada indice, tenemos que hacer un recorrido de todos los nodos del arbol y sumar el acumulado. if (indices == null || indices.length == 0) { logger.error( "Error obteniendo las cabeceras del repositorio. No existen indices en el indexador. Imposible continuar."); throw new Exception( "Error obteniendo las cabeceras del repositorio. No existen indices en el indexador. Imposible continuar."); } // Configuramos la query que se va a realizar sobre el indice BooleanQuery andQuery = new BooleanQuery(); // Configuramos el valor de memoria. andQuery.setMaxClauseCount(Integer.parseInt(props.getProperty("maxClauseCount"))); // Configuramos la fecha desde String antesS = null; String despuesS = null; if (fechaDesde != null) { Calendar antes = Calendar.getInstance(); antes.setTime(fechaDesde); antesS = "" + antes.get(Calendar.YEAR) + formatMonthMM((antes.get(Calendar.MONTH) + 1)) + formatDayDD(antes.get(Calendar.DAY_OF_MONTH)); } // Configuramos la fecha hasta if (fechaHasta != null) { Calendar despues = Calendar.getInstance(); despues.setTime(fechaHasta); despuesS = "" + despues.get(Calendar.YEAR) + formatMonthMM((despues.get(Calendar.MONTH) + 1)) + formatDayDD(despues.get(Calendar.DAY_OF_MONTH)); } logger.debug("Buscando headers en repositorio desde[" + antesS + "] hasta[" + despuesS + "]"); //aniadimos la query con el rango de fechas andQuery.add(getConstantScoreRangeQuery(props.getProperty(CAMPO_FECHA_PUBLICACION), antesS, despuesS), BooleanClause.Occur.MUST); // Nos recorremos todos los indices realizando la misma consulta y recopilando la informacion que saquemos de cada indice ArrayList resultados = new ArrayList(); for (int i = 0; i < indices.length; i++) { Directory directorioIndiceSimple = this.getIndexByLanguage(indices[i].getIdentificador()); if (directorioIndiceSimple == null) { logger.error("Error obteniendo las cabeceras del repositorio. Indice para idioma[" + indices[i].getIdentificador() + "] no accesible. Imposible buscar."); throw new Exception("Error obteniendo las cabeceras del repositorio. Indice para idioma[" + indices[i].getIdentificador() + "] no accesible. Imposible buscar."); } Hits hits; try { IndexSearcher searcher = new IndexSearcher(directorioIndiceSimple); searcher.setSimilarity(new DefaultSimilarity()); hits = searcher.search(andQuery); // Ahora llamamos a la busqueda en repositorio pero aplicando un filtro de licencia // hits = searcher.search(andQuery, crearFiltroLicencia()); } catch (Exception e) { logger.error("Error obteniendo las cabeceras del repositorio. Error buscando en indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception("Error obteniendo las cabeceras del repositorio. Error buscando en indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].", e); } if (hits != null && hits.length() > 0) { try { resultados.addAll(Arrays.asList(mapDocToHeader(hits))); } catch (RuntimeException e) { logger.error( "Error obteniendo las cabeceras del repositorio. Error mapeando resultados para indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception( "Error obteniendo las cabeceras del repositorio. Error mapeando resultados para indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].", e); } } } return (ResultadoHeaderVO[]) resultados.toArray(new ResultadoHeaderVO[0]); }
From source file:es.pode.indexador.negocio.servicios.busqueda.SrvBuscadorServiceImpl.java
License:Open Source License
/** * Metodo que ejecuta una busqueda en todo el repositorio con los parametros de busqueda que le pasan. * Las fechas desde y hasta se interpretan inclusives y en el caso de no estar presentes, sin limite superior o inferior. * @param paramBusq Parametros de busqueda. * @return ResultadoRecordVO[] Array de VO's que albergan los resulados de la consulta en un contenedor de Records. *///from ww w . ja va 2 s . c o m protected es.pode.indexador.negocio.servicios.busqueda.ResultadoRecordVO[] handleBusquedaRepositorio( ParamPeriodoRepositorioVO paramBusq) throws Exception { if (paramBusq == null) { logger.error("Error obteniendo los registros del repositorio. No hay parametros de busqueda."); throw new Exception("Error obteniendo los registros del repositorio. No hay parametros de busqueda."); } Date fechaDesde = (paramBusq.getDesde() != null ? paramBusq.getDesde().getTime() : null); Date fechaHasta = (paramBusq.getHasta() != null ? paramBusq.getHasta().getTime() : null); if (fechaDesde != null && fechaHasta != null && fechaDesde.after(fechaHasta)) { logger.error("Error obteniendo los registros del repositorio. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); throw new Exception("Error obteniendo los registros del repositorio. Fechas desde[" + fechaDesde.toString() + "] y hasta[" + fechaHasta.toString() + "] incoherentes."); } // Obtenemos todos los indices sobre los que hay objetos IndiceVO[] indices = new IndiceVO[0]; try { indices = handleObtenerIdiomasBusqueda(); } catch (Exception e) { logger.error("Error obteniendo los registros del repositorio. Imposible recuperar los indices.[" + e.getMessage() + "]"); throw new Exception("Error obteniendo los registros del repositorio. Imposible recuperar los indices.", e); } // Para cada indice, tenemos que hacer un recorrido de todos los nodos del arbol y sumar el acumulado. if (indices == null || indices.length == 0) { logger.error( "Error obteniendo los registros del repositorio. No existen indices en el indexador. Imposible continuar."); throw new Exception( "Error obteniendo los registros del repositorio. No existen indices en el indexador. Imposible continuar."); } // Configuramos la query que se va a realizar sobre el indice BooleanQuery andQuery = new BooleanQuery(); // Configuramos el valor de memoria. andQuery.setMaxClauseCount(Integer.parseInt(props.getProperty("maxClauseCount"))); // Configuramos la fecha desde String antesS = null; String despuesS = null; if (fechaDesde != null) { Calendar antes = Calendar.getInstance(); antes.setTime(fechaDesde); antesS = "" + antes.get(Calendar.YEAR) + formatMonthMM((antes.get(Calendar.MONTH) + 1)) + formatDayDD(antes.get(Calendar.DAY_OF_MONTH)); } // Configuramos la fecha hasta if (fechaHasta != null) { Calendar despues = Calendar.getInstance(); despues.setTime(fechaHasta); despuesS = "" + despues.get(Calendar.YEAR) + formatMonthMM((despues.get(Calendar.MONTH) + 1)) + formatDayDD(despues.get(Calendar.DAY_OF_MONTH)); } logger.debug("Buscando registros en repositorio desde[" + antesS + "] hasta[" + despuesS + "]"); //aniadimos la query con el rango de fechas andQuery.add(getConstantScoreRangeQuery(props.getProperty(CAMPO_FECHA_PUBLICACION), antesS, despuesS), BooleanClause.Occur.MUST); // Nos recorremos todos los indices realizando la misma consulta y recopilando la informacion que saquemos de cada indice ArrayList resultados = new ArrayList(); for (int i = 0; i < indices.length; i++) { Directory directorioIndiceSimple = this.getIndexByLanguage(indices[i].getIdentificador()); if (directorioIndiceSimple == null) { logger.error("Error obteniendo los registros del repositorio. Indice para idioma[" + indices[i].getIdentificador() + "] no accesible. Imposible buscar."); throw new Exception("Error obteniendo los registros del repositorio. Indice para idioma[" + indices[i].getIdentificador() + "] no accesible. Imposible buscar."); } Hits hits; try { IndexSearcher searcher = new IndexSearcher(directorioIndiceSimple); searcher.setSimilarity(new DefaultSimilarity()); hits = searcher.search(andQuery); // Ahora llamamos a la busqueda en repositorio pero aplicando un filtro de licencia // hits = searcher.search(andQuery, crearFiltroLicencia()); } catch (Exception e) { logger.error("Error obteniendo los registros del repositorio. Error buscando en indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception("Error obteniendo los registros del repositorio. Error buscando en indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].", e); } if (hits != null && hits.length() > 0) { try { resultados.addAll(Arrays.asList(mapDocToRecord(hits))); } catch (RuntimeException e) { logger.error( "Error obteniendo los registros del repositorio. Error mapeando resultados para indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].[" + e.getCause() + "]"); throw new Exception( "Error obteniendo los registros del repositorio. Error mapeando resultados para indice[" + indices[i].getIdentificador() + "] con query[" + andQuery.toString() + "].", e); } } } return (ResultadoRecordVO[]) resultados.toArray(new ResultadoRecordVO[resultados.size()]); }