Lucene - TermRangeQuery

TermRangeQuery se utiliza cuando se busca una variedad de términos textuales.

Declaración de clase

A continuación se muestra la declaración de org.apache.lucene.search.TermRangeQuery clase -

public class TermRangeQuery
   extends MultiTermQuery

Constructores de clases

La siguiente tabla muestra los diferentes constructores de clases:

S.No. Constructor y descripción
1

TermRangeQuery (campo String, String lowerTerm, String upperTerm, booleano includeLower, boolean includeUpper)

Construye una consulta seleccionando todos los términos mayores / iguales que lowerTerm pero menores / iguales que upperTerm.

2

TermRangeQuery (campo String, String lowerTerm, String upperTerm, booleano includeLower, boolean includeUpper, clasificador clasificador)

Construye una consulta seleccionando todos los términos mayores / iguales que lowerTerm pero menores / iguales que upperTerm.

Métodos de clase

La siguiente tabla muestra los diferentes métodos de clase:

S.No. Método y descripción
1

boolean equals(Object obj)

2

Collator getCollator()

Devuelve el clasificador utilizado para determinar la inclusión del rango, si corresponde.

3

protected FilteredTermEnum getEnum(IndexReader reader)

Construya la enumeración que se utilizará, ampliando el término del patrón.

4

String getField()

Devuelve el nombre del campo para esta consulta.

5

String getLowerTerm()

Devuelve el valor más bajo de esta consulta de rango

6

String getUpperTerm()

Devuelve el valor superior de esta consulta de rango.

7

int hashCode()

8

boolean includesLower()

Devuelve verdadero si el extremo inferior es inclusivo.

9

boolean includesUpper()

Devuelve verdadero si el extremo superior es inclusivo.

10

String toString(String field)

Imprime una versión legible por el usuario de esta consulta.

Métodos heredados

Esta clase hereda métodos de las siguientes clases:

  • org.apache.lucene.search.MultiTermQuery
  • org.apache.lucene.search.Query
  • java.lang.Object

Uso

private void searchUsingTermRangeQuery(String searchQueryMin,
   String searchQueryMax)throws IOException, ParseException {
   searcher = new Searcher(indexDir);
   long startTime = System.currentTimeMillis();
   
   //create the term query object
   Query query = new TermRangeQuery(LuceneConstants.FILE_NAME, 
      searchQueryMin,searchQueryMax,true,false);
   //do the search
   TopDocs hits = searcher.search(query);
   long endTime = System.currentTimeMillis();

   System.out.println(hits.totalHits +
      " documents found. Time :" + (endTime - startTime) + "ms");
   for(ScoreDoc scoreDoc : hits.scoreDocs) {
      Document doc = searcher.getDocument(scoreDoc);
      System.out.println("File: "+ doc.get(LuceneConstants.FILE_PATH));
   }
   searcher.close();
}

Aplicación de ejemplo

Creemos una aplicación Lucene de prueba para probar la búsqueda usando TermRangeQuery.

Paso Descripción
1

Cree un proyecto con el nombre LuceneFirstApplication en un paquete com.tutorialspoint.lucene como se explica en el capítulo Lucene - Primera aplicación . También puede utilizar el proyecto creado en Lucene - Capítulo Primera aplicación como tal para este capítulo para comprender el proceso de búsqueda.

2

Cree LuceneConstants.java y Searcher.java como se explica en el capítulo Lucene - Primera aplicación . Mantenga el resto de los archivos sin cambios.

3

Cree LuceneTester.java como se menciona a continuación.

4

Limpie y compile la aplicación para asegurarse de que la lógica empresarial funcione según los requisitos.

LuceneConstants.java

Esta clase se utiliza para proporcionar varias constantes que se utilizarán en la aplicación de muestra.

package com.tutorialspoint.lucene;

public class LuceneConstants {
   public static final String CONTENTS = "contents";
   public static final String FILE_NAME = "filename";
   public static final String FILE_PATH = "filepath";
   public static final int MAX_SEARCH = 10;
}

Searcher.java

Esta clase se usa para leer los índices hechos en datos brutos y buscar datos usando la biblioteca Lucene.

package com.tutorialspoint.lucene;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Searcher {
	
   IndexSearcher indexSearcher;
   QueryParser queryParser;
   Query query;

   public Searcher(String indexDirectoryPath) throws IOException {
      Directory indexDirectory = 
         FSDirectory.open(new File(indexDirectoryPath));
      indexSearcher = new IndexSearcher(indexDirectory);
      queryParser = new QueryParser(Version.LUCENE_36,
         LuceneConstants.CONTENTS,
         new StandardAnalyzer(Version.LUCENE_36));
   }

   public TopDocs search( String searchQuery) 
      throws IOException, ParseException {
      query = queryParser.parse(searchQuery);
      return indexSearcher.search(query, LuceneConstants.MAX_SEARCH);
   }
   
   public TopDocs search(Query query) throws IOException, ParseException {
      return indexSearcher.search(query, LuceneConstants.MAX_SEARCH);
   }

   public Document getDocument(ScoreDoc scoreDoc) 
      throws CorruptIndexException, IOException {
     return indexSearcher.doc(scoreDoc.doc);	
   }

   public void close() throws IOException {
      indexSearcher.close();
   }
}

LuceneTester.java

Esta clase se utiliza para probar la capacidad de búsqueda de la biblioteca Lucene.

package com.tutorialspoint.lucene;

import java.io.IOException;

import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermRangeQuery;
import org.apache.lucene.search.TopDocs;

public class LuceneTester {
	
   String indexDir = "E:\\Lucene\\Index";
   String dataDir = "E:\\Lucene\\Data";
   Searcher searcher;

   public static void main(String[] args) {
      LuceneTester tester;
      try {
         tester = new LuceneTester();
         tester.searchUsingTermRangeQuery("record2.txt","record6.txt");
      } catch (IOException e) {
         e.printStackTrace();
      } catch (ParseException e) {
         e.printStackTrace();
      }
   }

   private void searchUsingTermRangeQuery(String searchQueryMin,
      String searchQueryMax)throws IOException, ParseException {
      searcher = new Searcher(indexDir);
      long startTime = System.currentTimeMillis();
      
      //create the term query object
      Query query = new TermRangeQuery(LuceneConstants.FILE_NAME, 
         searchQueryMin,searchQueryMax,true,false);
      //do the search
      TopDocs hits = searcher.search(query);
      long endTime = System.currentTimeMillis();

      System.out.println(hits.totalHits +
         " documents found. Time :" + (endTime - startTime) + "ms");
      for(ScoreDoc scoreDoc : hits.scoreDocs) {
         Document doc = searcher.getDocument(scoreDoc);
         System.out.println("File: "+ doc.get(LuceneConstants.FILE_PATH));
      }
      searcher.close();
   }
}

Creación de directorios de datos e índices

Hemos utilizado 10 archivos de texto de record1.txt a record10.txt que contienen nombres y otros detalles de los estudiantes y los colocamos en el directorio E: \ Lucene \ Data. Prueba de datos . Se debe crear una ruta de directorio de índice como E: \ Lucene \ Index. Después de ejecutar el programa de indexación en el capítulo Lucene - Proceso de indexación, puede ver la lista de archivos de índice creados en esa carpeta.

Ejecutando el programa

Una vez que haya terminado con la creación de la fuente, los datos sin procesar, el directorio de datos, el directorio de índices y los índices, puede proceder compilando y ejecutando su programa. Para hacer esto, mantenga elLuceneTester.Java pestaña de archivo activa y use la opción Ejecutar disponible en el IDE de Eclipse o use Ctrl + F11 para compilar y ejecutar su LuceneTestersolicitud. Si su aplicación se ejecuta correctamente, imprimirá el siguiente mensaje en la consola de Eclipse IDE:

4 documents found. Time :17ms
File: E:\Lucene\Data\record2.txt
File: E:\Lucene\Data\record3.txt
File: E:\Lucene\Data\record4.txt
File: E:\Lucene\Data\record5.txt