Apache Lucene
- Programmbibliothek zur Volltextsuche
- von Apache Software Foundation
.NET
- .NET-Implementierung: Lucene.NET
Installation
dotnet new console --name LuceneTest
cd LuceneTest
dotnet add package Lucene.Net --prerelease
dotnet add package Lucene.Net.Analysis.Common --prerelease
Hinweis: Die
--prerelease-Option ist erforderlich, da Lucene.NET schon seit langem in der Beta-Version 4.8.0 Beta (Stand 24.06.2025) vorliegt. Diese ist jedoch sehr stabil und wird schon produktiv in vielen Projekten eingesetzt.
Grundaufbau
Siehe Startseite von Lucene.NET
Queries
TermQuery
- sucht Dokumente, die spezifisches einzelnes Wort enthalten
- sucht Terme
Query termQuery = new TermQuery(new Term("content", "lucene"));
luceneIndex.Search(termQuery, 10);
PhraseQuery
- sucht Dokumente, die bestimmte Abfolge von Wörtern / Phrasen enthalten
PhraseQuery phraseQuery = new PhraseQuery() { Slop = 0 };
phraseQuery.Add(new Term("content", "verlorenen"));
phraseQuery.Add(new Term("content", "schatz"));
luceneIndex.Search(phraseQuery1, 10);
| Eigenschaft | Datentyp | Beschreibung |
|---|---|---|
Slop | int | 0: Wörter müssen direkt nebeneinander stehen |
| 1: erlaubt Wort zwischen den Wörtern |
WildcardQuery
- sucht Dokumente, die mit Platzhaltern/Wildcard übereinstimmende Wörter enthalten
- sucht Phrasen
WildcardQuery wildcardQuery = new WildcardQuery(new Term("content", "geh?eimnis*"));
luceneIndex.Search(wildcardQuery, 10);
| Wildcard | Bedeutung |
|---|---|
? | 1 beliebiges Zeichen |
* | beliebig viele beliebige Zeichen |
FuzzyQuery
- sucht Dokumente, die dem Suchbegriff ähnliche Wörter enthalten (Tippfehlertoleranz)
FuzzyQuery fuzzyQuery = new FuzzyQuery(new Term("content", "rezepte"), maxEdits: 1);
luceneIndex.Search(fuzzyQuery, 10);
| Eigenschaft | Bedeutung |
|---|---|
maxEdits | maximaler Editierabstand |
BooleanQuery
- kombiniert mehrere Queries mit logischen Operatoren
- logische Operatoren: und, oder, nicht
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(new TermQuery(new Term("content", "alpen")), Occur.MUST);
booleanQuery.Add(new TermQuery(new Term("content", "schweiz")), Occur.MUST);
booleanQuery.Add(new TermQuery(new Term("content", "reisen")), Occur.SHOULD);
luceneIndex.Search(booleanQuery, 10);
QueryParser
- ermöglicht Suche mit Query-Syntax
- QueryParser: Lucene.Net.QueryParser
- Query-Syntax: Apache Lucene - Query Parser Syntax
const LuceneVersion matchVersion = LuceneVersion.LUCENE_48;
StandardQueryParser qpHelper = new StandardQueryParser();
QueryConfigHandler config = qpHelper.QueryConfigHandler;
config.Set(ConfigurationKeys.ALLOW_LEADING_WILDCARD, true);
config.Set(ConfigurationKeys.ANALYZER, new WhitespaceAnalyzer(matchVersion));
Query query = qpHelper.Parse("apache AND lucene", "defaultField");
Query-Syntax
Beispiele:
| Query | Beschreibung |
|---|---|
test^10 | wird höher gewichtet |
test~ | Fuzzy-Suche |
test^10 or test~ | wenn test alleine vorkommt, wird es höher gewichtet, nachher kommen Resultate, welche ungefähr gleich wie test sind |