Example usage for org.apache.lucene.search BooleanQuery setMaxClauseCount

List of usage examples for org.apache.lucene.search BooleanQuery setMaxClauseCount

Introduction

In this page you can find the example usage for org.apache.lucene.search BooleanQuery setMaxClauseCount.

Prototype

public static void setMaxClauseCount(int maxClauseCount) 

Source Link

Document

Set the maximum number of clauses permitted per BooleanQuery.

Usage

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()]);
}