Pregunta

Quiero obtener una lista de todas las palabras en un índice Lucene que comienzan con un prefijo específico. He estado buscando una forma de consultar los términos en el índice (necesito los términos, no me importa acerca de los documentos que son de) pero sin éxito. Algunas ideas?

¿Fue útil?

Solución

Lo tienes! subclases FilteredTermEnum (FuzzyTermEnum, RegexTermEnum, WildcardTermEnum) hacen exactamente lo que necesito.

Aquí está un ejemplo rápido:

FSDirectory dir = FSDirectory.open(new File("index"));
IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
    true, new IndexWriter.MaxFieldLength(20));
IndexReader reader = IndexReader.open(dir);

Document doc = new Document();
doc.add(new Field(
    "text",
    "Life #consists not in #holding good cards, but in playing those you hold well.",
    Field.Store.NO, Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();

WildcardTermEnum tagsEnum = new WildcardTermEnum(reader, new Term("text", "#*"));
do {
    System.out.println(tagsEnum.term());
} while (tagsEnum.next());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top