Blog » Apache Lucene
.. ist eine Search-Engine
Das folgende Code-Beispiel arbeitet mit Apache Lucene 8.4.1.
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.TokenStream;
- import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
- import org.apache.lucene.analysis.custom.CustomAnalyzer;
- import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilterFactory;
- import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.document.StoredField;
- import org.apache.lucene.document.TextField;
- import org.apache.lucene.index.DirectoryReader;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.index.IndexWriterConfig;
- import org.apache.lucene.index.Term;
- import org.apache.lucene.search.BoostQuery;
- 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.search.WildcardQuery;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.MMapDirectory;
- Directory directory = new MMapDirectory(java.nio.Path);
- Analyzer analyzer = CustomAnalyzer.builder()
- .withTokenizer(LetterOrDigitTokenizerFactory.class)
- .addTokenFilter(LowerCaseFilterFactory.class)
- .addTokenFilter(ASCIIFoldingFilterFactory.class)
- .build();
- IndexWriterConfig configuration = new IndexWriterConfig(analyzer);
- try (IndexWriter writer = new IndexWriter(index, configuration)) {
-
- writer.deleteAll();
- writer.commit();
- for (String s : strings) {
- Document document = new Document();
- document.add(new TextField(IDENTIFIER, s, Field.Store.YES));
- writer.addDocument(document);
- }
- }
- Query query = new WildcardQuery(new Term(IDENTIFIER, needle));
- IndexReader reader = DirectoryReader.open(index);
- IndexSearcher searcher = new IndexSearcher(reader);
- TopDocs scoredDocuments = searcher.search(query, 50);
- for (ScoreDoc scoreDocument : scoredDocuments.scoreDocs) {
- Document document = searcher.doc(scoreDocument.doc);
- }