Aquí podría ser tu PUBLICIDAD


Obtener nombres de campo de una cadena de consulta lucene

votos
0

Si tengo una cadena de consulta Lucene

field1:value1 myField:aValue

¿Hay alguna manera de dejar que Lucene analice esto para que pueda obtener consultas de términos?
En última instancia, quiero poder recuperar los nombres de campo y sus valores en mis datos de visualización para poder llenarlos en mis cuadros de texto en la publicación posterior.

Publicado el 12/03/2009 a las 16:21
fuente por usuario Boris Callens
En otros idiomas...        العربية       

2 respuestas

votos
2

Lucene QueryParserconvertirá esa cadena en una que BooleanQuerycontenga dos TermQuerycláusulas. Tendrá que usar el getClausesmétodo de BooleanQuerypara obtener las consultas del término.

Respondida el 14/03/2009 a las 02:23
fuente por usuario itsadok


Aquí podría ser tu PUBLICIDAD


votos
1

Me enfrenté requisito similar, pero la consulta puede ser genérico. Subió con el método siguiente (implementado en Java). Código completo https://github.com/atulsm/Test_Projects/blob/master/src/TestLuceneQueryStringFields.java

private static Set<String> calculateQueryFieldsRecursively(Query query) throws ParseException{
    Set<String> fields = new HashSet<String>();

    if(query instanceof TermQuery){
        TermQuery tQuery = (TermQuery)query;            
        Term term = tQuery.getTerm();
        fields.add(term.field());
    } else if(query instanceof BooleanQuery){
        BooleanQuery bQuery = (BooleanQuery)query;
        List<BooleanClause> clauses = bQuery.clauses();
        for(BooleanClause clause: clauses){
            Query innerQuery = clause.getQuery();
            Set<String> innerFields = calculateQueryFieldsRecursively(innerQuery);
            if(innerFields == null){
                return null;
            }else{
                fields.addAll(innerFields);
            }
        }
    } else { //TODO support more lucene query types
        return null;
    }   
    return fields;
}
Respondida el 13/12/2016 a las 05:48
fuente por usuario Atul Soman