Lucene - TermRangeQuery
TermRangeQuery est utilisé lorsqu'une plage de termes textuels doit être recherchée.
Déclaration de classe
Voici la déclaration pour le org.apache.lucene.search.TermRangeQuery classe -
public class TermRangeQuery
extends MultiTermQuery
Constructeurs de classe
Le tableau suivant montre les différents constructeurs de classe -
S.No. | Constructeur et description |
---|---|
1 | TermRangeQuery (champ String, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) Construit une requête sélectionnant tous les termes supérieurs / égaux à lowerTerm mais inférieurs / égaux à upperTerm. |
2 | TermRangeQuery (champ String, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper, Collator collator) Construit une requête sélectionnant tous les termes supérieurs / égaux à lowerTerm mais inférieurs / égaux à upperTerm. |
Méthodes de classe
Le tableau suivant montre les différentes méthodes de classe -
S.No. | Méthode et description |
---|---|
1 | boolean equals(Object obj) |
2 | Collator getCollator() Renvoie l'assembleur utilisé pour déterminer l'inclusion de plage, le cas échéant. |
3 | protected FilteredTermEnum getEnum(IndexReader reader) Construisez l'énumération à utiliser, en développant le terme du modèle. |
4 | String getField() Renvoie le nom du champ pour cette requête. |
5 | String getLowerTerm() Renvoie la valeur inférieure de cette requête de plage |
6 | String getUpperTerm() Renvoie la valeur supérieure de cette requête de plage. |
sept | int hashCode() |
8 | boolean includesLower() Renvoie true si le point de terminaison inférieur est inclusif. |
9 | boolean includesUpper() Renvoie true si le point de terminaison supérieur est inclusif. |
dix | String toString(String field) Imprime une version lisible par l'utilisateur de cette requête. |
Méthodes héritées
Cette classe hérite des méthodes des classes suivantes -
- org.apache.lucene.search.MultiTermQuery
- org.apache.lucene.search.Query
- java.lang.Object
Usage
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();
}
Exemple d'application
Créons une application de test Lucene pour tester la recherche à l'aide de TermRangeQuery.
Étape | La description |
---|---|
1 | Créez un projet avec un nom LuceneFirstApplication sous un package com.tutorialspoint.lucene comme expliqué dans le chapitre Lucene - Première application . Vous pouvez également utiliser le projet créé dans le chapitre Lucene - Première application en tant que tel pour ce chapitre pour comprendre le processus de recherche. |
2 | Créez LuceneConstants.java et Searcher.java comme expliqué dans le chapitre Lucene - Première application . Gardez le reste des fichiers inchangés. |
3 | Créez LuceneTester.java comme indiqué ci-dessous. |
4 | Nettoyez et créez l'application pour vous assurer que la logique métier fonctionne conformément aux exigences. |
LuceneConstants.java
Cette classe est utilisée pour fournir diverses constantes à utiliser dans l'exemple d'application.
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
Cette classe permet de lire les index créés sur des données brutes et de rechercher des données à l'aide de la bibliothèque 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
Cette classe est utilisée pour tester la capacité de recherche de la bibliothèque 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();
}
}
Création de répertoires de données et d'index
Nous avons utilisé 10 fichiers texte de record1.txt à record10.txt contenant les noms et autres détails des étudiants et les avons mis dans le répertoire E: \ Lucene \ Data. Données de test . Un chemin de répertoire d'index doit être créé sous la forme E: \ Lucene \ Index. Après avoir exécuté le programme d'indexation dans le chapitre Lucene - Processus d'indexation, vous pouvez voir la liste des fichiers d'index créés dans ce dossier.
Exécution du programme
Une fois que vous avez terminé la création de la source, des données brutes, du répertoire de données, du répertoire d'index et des index, vous pouvez continuer en compilant et en exécutant votre programme. Pour ce faire, gardez leLuceneTester.Java onglet fichier actif et utilisez soit l'option Exécuter disponible dans l'EDI Eclipse, soit utilisez Ctrl + F11 pour compiler et exécuter votre LuceneTesterapplication. Si votre application s'exécute avec succès, elle imprimera le message suivant dans la console d'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