Estoy trabajando para integrar Lucene en nuestra aplicación. Lucene está trabajando actualmente, por ejemplo, cuando estoy buscando "Cargar" y hay un texto llamado "Cargar" en un documento, entonces funciona, pero cuando busco "Uplo", entonces no funciona. ¿Algunas ideas?

Código:

  Directory directory = FSDirectory.open(path);
                IndexReader indexReader = DirectoryReader.open(directory);
                IndexSearcher indexSearcher = new IndexSearcher(indexReader);

                QueryParser queryParser = new QueryParser("contents", new SimpleAnalyzer());
                Query query = queryParser.parse(text);
                TopDocs topDocs = indexSearcher.search(query, 50);
                for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
                    org.apache.lucene.document.Document document = indexSearcher.doc(scoreDoc.doc);
                    objectIds.add(Integer.valueOf(document.get("id")));
                    System.out.println("");
                    System.out.println("id " + document.get("id"));
                    System.out.println("content " + document.get("contents"));
                }
                return objectIds;

Gracias.

3
We are Borg 3 may. 2017 a las 13:01

3 respuestas

La mejor respuesta

'Cargar' podría ser UN Token en su índice de Lucene, donde un Token sería la entidad más pequeña que no se puede dividir más. Si desea hacer coincidir palabras parciales como 'Uplo', entonces es mejor ir a Lucene NGram Indexing. Tenga en cuenta que si opta por la indexación NGram, tendrá mayores requisitos de espacio para su índice invertido.

2
Yavar 3 may. 2017 a las 11:59

Puede utilizar búsquedas con comodines.

"?" símbolo para búsqueda con comodines de un solo carácter y símbolo "*" para búsquedas con comodines de múltiples caracteres (0 o más caracteres).

Ejemplo: "Uplo *"

0
Sameera.San 3 may. 2017 a las 10:12

Cambio

Query query = queryParser.parse(text);

Para

 Query query = queryParser.parse("*"+text+"*");

Lucene admite búsquedas con comodines de caracteres únicos y múltiples dentro de términos únicos (no dentro de consultas de frase).

Para realizar una búsqueda con comodines de un solo carácter, utilice el "?" símbolo.

Para realizar una búsqueda con comodines de varios caracteres, utilice el símbolo "*".

La búsqueda con comodines de un solo carácter busca términos que coincidan con el carácter único reemplazado. Por ejemplo, para buscar "texto" o "prueba" puede usar la búsqueda:

te?t

Las búsquedas con comodines de varios caracteres buscan 0 o más caracteres. Por ejemplo, para buscar pruebas, pruebas o probadores, puede usar la búsqueda:

test*

También puede usar las búsquedas con comodines en la mitad de un término.

te*t

Nota: No puedes usar un * o? símbolo como el primer carácter de una búsqueda.

0
Mike Adamenko 3 may. 2017 a las 10:30