Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
¿Cómo obtener una lista de todos los tokens del índice Lucene 8.6.1?

He visto cómo obtener una lista de todos los tokens del índice Solr/Lucene. pero Lucene 8.6.1 no parece ofrecer IndexReader.terms() . ¿Se ha movido o reemplazado? ¿Hay una manera más fácil que esta respuesta ?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Algo de historia

Preguntaste: Me pregunto si IndexReader.terms() se ha movido o ha sido reemplazado por una alternativa.

El método IndexReader.terms() de Lucene v3 se movió a AtomicReader en Lucene v4. Esto se documentó en las notas de la versión alfa v4 .

(Tenga en cuenta que Lucene v4 se lanzó en 2012).

El método en AtomicReader en v4 toma un nombre de campo .

Como indican las notas de la versión v4:

Una gran diferencia es que el campo y los términos ahora se enumeran por separado: un TermsEnum proporciona un BytesRef (envuelve un byte []) por término dentro de un solo campo, no un término.

La parte clave allí es "por término dentro de un solo campo" . Entonces, a partir de ese momento, ya no hubo una sola llamada a la API para recuperar todos los términos de un índice.

Este enfoque se mantuvo en versiones posteriores, excepto que las clases AtomicReader y AtomicReaderContext se renombraron como LeafReader y LeafReaderContext en Lucene v 5.0.0. Ver Lucene-5569 .

Lanzamientos recientes

Eso nos deja con la capacidad de acceder a listas de términos, pero solo por campo:

El siguiente código se basa en la última versión de Lucene (8.7.0), pero también debería ser válido para la versión que menciona (8.6.1), con el ejemplo usando Java:

 private void getTokensForField(IndexReader reader, String fieldName) throws IOException { List<LeafReaderContext> list = reader.leaves(); for (LeafReaderContext lrc : list) { Terms terms = lrc.reader().terms(fieldName); if (terms != null) { TermsEnum termsEnum = terms.iterator(); BytesRef term; while ((term = termsEnum.next()) != null) { System.out.println(term.utf8ToString()); } } } }

El ejemplo anterior asume un índice de la siguiente manera:

 private static final String INDEX_PATH = "/path/to/index/directory"; ... IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(INDEX_PATH)));

Si necesita enumerar los nombres de los campos, el código de esta pregunta puede proporcionarle un punto de partida.

Nota final

Supongo que también puede acceder a los términos por documento , en lugar de por campo , como se menciona en los comentarios. No he intentado esto.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!