0 Einführung
Mit der Entwicklung des World Wide Web und dem Aufkommen der Big Data -Ära wird täglich eine große Menge digitaler Informationen erstellt, gespeichert, übertragen und konvertiert. So finden Sie Informationen, die Ihre Bedürfnisse aus einer großen Menge an Informationen auf eine bestimmte Weise entsprechen, damit sie bestellt und genutzt werden können, ist zu einem großen Problem geworden. Die Volltext-Suchtechnologie ist heute die häufigste Informationsabfrageanwendung. Im Leben werden Suchmaschinen verwendet, um Informationen in Blog -Foren zu durchsuchen. Das Kernprinzip dieser Suchanfragen ist die in diesem Artikel implementierte Volltext-Suchtechnologie. Mit der Realisierung der Digitalisierung von Dokumenteninformationen ist das effektive Speichern und zeitnahe und genaue Extrahieren der Informationen die Grundlage für jedes Unternehmen, jedes Unternehmen und jede Einheit, um eine gute Grundlage zu schaffen. Es gibt bereits viele ausgereifte Theorien und Methoden für die Volltext-Suche in Englisch. Die Open Source-Volltext-Suchmaschine Lucene ist ein Unterprojekt des Jakarta-Projektteams der Apache Software Foundation. Sein Ziel ist es, Softwareentwicklern ein einfaches und benutzerfreundliches Toolkit zur Verfügung zu stellen, um die Implementierung von Volltext-Suchfunktionen im Zielsystem zu erleichtern. Lucene unterstützt Chinesen nicht, aber derzeit gibt es viele Open -Source -Segmentierer chinesischer Wortsegmentierer, die chinesische Inhalte indexieren können. Basierend auf der Untersuchung von Lucenes Kernprinzipien erkennt dieses Papier das Kriechen und das Abrufen chinesischer bzw. englischer Webseiten.
1 Einführung in Lucene
1.1 Einführung in Lucene
Lucene ist ein in Java geschriebenes Volltext-Suchmaschinen-Toolkit, das zwei Kernfunktionen implementiert: Indexierung und Suche, und die beiden sind unabhängig voneinander, wodurch Entwickler leicht erweitert werden können. Lucene bietet reichhaltige APIs, die leicht mit Informationen, die im Index gespeichert sind, interagieren können. Es ist zu beachten, dass es sich nicht um eine vollständige Volltext-Suchanwendung handelt, sondern Indizier- und Suchfunktionen für die Anwendung. Das heißt, wenn Lucene wirklich arbeiten will, ist es notwendig, eine notwendige Sekundärentwicklung zu erstellen, die darauf beruhen.
Das strukturelle Design von Lucene ähnelt dem der Datenbank, aber der Index von Lucene unterscheidet sich stark von der der Datenbank. Datenbanken und Lucene -Indexierung dienen alle für die Suche nach der Suche, aber die Datenbank wird nur für einige Felder festgelegt, und die Daten müssen in formatierte Informationen umgewandelt und gespeichert werden. Die Volltext-Suche besteht darin, alle Informationen auf eine bestimmte Weise zu indizieren. Die Unterschiede und Ähnlichkeiten der beiden Suchvorgänge sind in Tabelle 1-1 dargestellt.
Tabelle 1-1: Vergleich der Datenbanksuche und Lucene-Suche
Vergleich | Lucene -Suche | Datenbankabruf |
Datenabruf | Schauen Sie sich die Indexdatei von Lucene an | Rufen Sie Datensätze aus dem Datenbankindex ab |
Indexstruktur | Dokumentieren | Aufzeichnen |
Abfrageergebnisse | Hit: Dokumentkomposition, die Beziehungen erfüllt | Abfrageergebnissatz: Datensätze mit Schlüsselwörtern enthalten |
Volltext -Suche | Unterstützung | Nicht unterstützt |
Fuzzy -Abfrage | Unterstützung | Nicht unterstützt |
Ergebnissortierung | Gewichte einstellen und Korrelation sortieren | Kann nicht sortiert werden |
1.2 Lucene Gesamtstruktur
Die Release -Form des Lucene -Softwarepakets ist eine JAR -Datei mit schnellen Versionsaktualisierungen und Großversion -Lücken. In diesem Artikel wird Version 5.3.1 verwendet, und die verwendeten Hauptunterlagen sind in Tabelle 1-2 angezeigt.
Tabelle 1-2: Unterpackungen und Funktionen
Paketname | Funktion |
Org.apache.lucene.Analysis | Partizip |
Org .apache.lucene .dokument | Dokumentation für das Indexmanagement |
Org .apache.lucene .Index | Indexierungsvorgänge, einschließlich Addition, Löschung usw. |
Org.apache.lucene.queryparser | Queryer, Suchausdrücke konstruieren |
Org .apache.lucene .Search | Suchmanagement |
Org .apache.lucene .Store | Datenspeicherverwaltung |
Org .apache.lucen .util | Öffentliche Kategorie |
1.3 Lucene Architektur Design
Lucene hat sehr leistungsstarke Funktionen, aber im Grunde enthält es hauptsächlich zwei Teile: Eine besteht darin, den Index in der Bibliothek zu indexieren, nachdem der Textinhalt segmentiert wurde. Die andere besteht darin, die Ergebnisse gemäß den Abfragebedingungen zurückzusetzen, dh einen Index und eine Abfrage.
Wie in Abbildung 1-1 gezeigt, wirft dieser Artikel externe Schnittstellen und Informationsquellen aus und konzentriert sich auf die Indizierung und Abfrage des von Webseiten krabbelten Textinhalts.
Abbildung 1-1: Lucenes Architekturdesign
2 JDK -Installations- und Umgebungsvariablenkonfiguration
1.JDK Download:
Laden Sie das komprimierte Paket herunter, das der Systemversion auf der offiziellen Website von Oracle entspricht, und die URL lautet wie folgt. Klicken Sie auf Installieren und installieren Sie gemäß den Eingabeaufforderungen. Während des Installationsprozesses fordern Sie auf, ob JRE installiert werden soll, auf ja.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. Setzen Sie Umgebungsvariablen:
(1) Klicken Sie mit der rechten Maustaste auf Computer =》 Eigenschaften =》 Erweiterte Systemeinstellungen =》 Umgebungsvariable =》 Systemvariable =》 new =》 java_home: Installationspfad
(2) neu zu Path =》%Java_Home%/bin zugefügt
3. Ob der Test erfolgreich ist:
Start =》 run =》 CMD Geben Sie in das Popup-DOS-Fenster ein
ENTER: Java -Verssion zeigt Versionsinformationen an.
Geben Sie ein: Javac -Nutzungsinformationen werden in Javac angezeigt
Das Erscheinungsbild ist wie in Abbildung 2-1 als Erfolg dargestellt.
Abbildung 2-1: CMD-Befehlsbox-Test-Java-Konfiguration
3. Schreiben Sie Java -Code, um Webinhalte zu erhalten
Da Lucene verschiedene Wortsegmentierer für verschiedene Sprachen verwenden muss, werden Standard -Wortsegmentierer in englischer Sprache verwendet, und SmartCN -Wortsegmentierer werden in Chinesisch verwendet. Wenn Sie eine Webseite erhalten, erhalten Sie zuerst die Webseite als HTML -Datei. In der HTML beeinflusst die Tag -Interferenz den Abrufeffekt. Daher muss das HTML -Tag beseitigt werden und der Textinhalt wird zum Speichern in eine TXT -Datei konvertiert. Mit Ausnahme von Wortwächtern sind die anderen in Chinesisch und Englisch im Grunde gleich, sodass nachfolgende Code- und experimentelle Ergebnisse Demonstration ausgewählt werden. Dieser Artikel wählt fünfzig Webseiten chinesischer und englischer Geschichten als Beispiele aus.
Das spezifische Codedesign lautet wie folgt: URL2HTML.java konvertiert die Webseiten -Eingabe -URL in eine HTML -Datei, und die HTML2TXT.java -Datei erkennt das Entfernen des HTML -Dokument -Tags und konvertiert es in ein TXT -Dokument. Die spezifischen Codes sind in den Abbildungen 3-1 und 3-2 dargestellt.
public void way (String filepath, String url) löst Ausnahme aus {Datei dest = neue Datei (filepath); // Datei inputStream erstellen; // Byte -Eingangs -Stream -File -Putstream -FOS = new FileOutputStream (dest); // Byte -Ausgabe -Stream -URL Wangzhi = new url (url); // set uRl url ire BufferedInputStream Bis = neuer bufferedInputStream (IS); // buffered outputStream für Byte -Eingangsstrom bos = neuer bufferedOutputStream (FOS); // Puffer des Byte -Ausgangsstroms/** Lesen Sie die Byte*/int -Länge; byte [] bytes = neues byte [1024*20]; while ((Länge = Bis.read (Bytes, 0, Bytes.length))! = -1) {fos.write (Bytes, 0, Länge); } /** Gepufferten Stream und Eingangs- und Ausgangsstrom* / bos.close () schließen; fos.close (); Bis.close (); IS.CLOSE (); } public String getBody (String Val) {String zyf = val.ReplaceAll ("</? [^>]+>", ""); // Schauen Sie sich das <html> Tag zurück. try {witeneName.createNewFile (); BufferedWriter out = new bufferedWriter (neuer FileWriter (WriteName)); out.write (str); out.flush (); out.close (); } catch (ioException e) {e.printstacktrace (); }}Wenn der Dokumentenpfad als Beispiel die Webseite des Märchens "The Dumme Wolf Going to School" aufnimmt, ist der Dokumentenpfad auf "E:/Work/Lucene/Test/Data/HTML" und "E:/Work/Lucene/Test/Data/Txt" eingestellt. Die beiden Parameter, die beim Lesen der Webseite festgelegt werden müssen, werden als Dateiname bezeichnet und die Ziel -URL -URL erhalten. Erstellen Sie eine neue Hauptfunktion, um Anrufe zu zwei Methoden zu implementieren. Die spezifische Implementierung ist in Abbildung 3-3 dargestellt:
public static void main (String [] args) {String fileName = "jingdizhi"; // Dateiname String url = "http://www.51Test.net/show/8072125.html";//web Seite, die krabbelte, filepath = kroched String filepath = "E: // work // lucene // test // data // html //"+fileName+".html"; // den Dateipfad von html+Dateiname String writepath = "e: // work // lucene // test // Data // txt //"+filename+". = neuer url2html (); try {url2html.way (filepath, url); } catch (Ausnahme e) {e.printstacktrace (); } Html2txt html2txt = new html2txt (); String read = html2txt.readFile (filepath); // Lesen Sie die html -Datei string txt = html2txt.getBody (read); // Entfernen Sie das html Tag system.out.println (txt); try {html2txt.writetxt (txt, writepath); } catch (Ausnahme e) {e.printstacktrace (); }}Erstellen Sie nach Ausführung des Programms in zwei Ordnern "Silly Wolf School.html" und "Silly Wolf School.txt".
4. Erstellen Sie einen Index
Die Grundprinzipien der Indexierung und Abfrage sind wie folgt:
Indexierung: Die Indexierung von Suchmaschinen soll die spezifische Datenstruktur der "Wortdokumentmatrix" implementieren. Es ist auch der erste Schritt im Volltext -Abruf. Lucene bietet die Indexwriter -Klasse für das Indexmanagement, hauptsächlich inklusive Add (), Delete () und Update (). Es gibt auch die Einstellung von Gewichten. Durch die Einstellung verschiedener Indexgewichte können Sie während der Suche nach der Korrelationsgröße zurückkehren.
Suche: Die ursprüngliche direkte Suche bestand darin, nach Dokumenten nacheinander zu suchen. Nach der Einrichtung eines Index finden Sie den Ort, an dem das Indexwort im Dokument angezeigt wird, indem Sie den Index durchsuchen, und dann die Position und das Wort im Dokument zurückgeben, in das das Indexelement korrekt ist. Lucene stellt die Indexsearcher -Klasse zur Durchsuchung von Dokumenten zur Verfügung. Die Suchformulare sind hauptsächlich in zwei Kategorien unterteilt. Die erste Kategorie ist Begriff, die nach einzelnen Begriffselementen sucht. Die zweite Kategorie ist Parser, die die Suchausdrücke anpassen und mehr Suchformulare enthält. Die spezifischen Methoden werden später demonstriert.
4.1 Experimentelle Umgebung
Dieser PC verwendet Windows 10x64 -System, 8G -Speicher und 256G SSD. Die Entwicklungsumgebung ist MyeClipse 10 und die JDK -Version 1,8. Während des Experiments wurden aufgrund einiger Syntaxänderungen mehrere Klassen unter Verwendung von Version 1.6 implementiert.
4.2 Erstellen eines Index
Das Erstellen einer Indexbibliothek besteht darin, die Indexbibliothek Indexdatensätze hinzuzufügen. Lucene bietet eine Schnittstelle zum Hinzufügen von Indexdatensätzen und Fügen Sie Indexes.
Es wird hauptsächlich drei Kategorien verwendet: "Write Indexer", "Dokument" und "Domain". Um einen Index zu erstellen, müssen Sie zunächst ein Dokument -Dokumentobjekt erstellen und die verschiedenen Felder des Dokuments ermitteln. Dies ähnelt der Einrichtung einer Tabellenstruktur in einer relationalen Datenbank. Das Dokument entspricht einer Datensatzzeile in einer Tabelle und das Feld entspricht einer Spalte in einer Zeile. In Lucene können für die Eigenschaften und die Datenausgabeanforderungen verschiedener Domänen verschiedene Index-/Speicherfeldregeln für die Domäne ausgewählt werden. In diesem Experiment werden der Dateiname Dateiname, Dateipfad und Textinhalt als Felder des Dokuments verwendet.
Indexwriter ist dafür verantwortlich, neu hinzugefügte Dokumente zu empfangen und in die Indexbibliothek zu schreiben. Beim Erstellen des Write IndexWriter IndexWriter müssen Sie den von Ihnen verwendeten Sprachanalysator angeben. Die Indexerstellung ist in zwei Kategorien unterteilt: der erste: ungewichtete Index; die zweite: gewichteter Index.
öffentlicher Indexer (String IndexDir) löst Ausnahme aus (Verzeichnis DIR = fsDirectory.open (paths.get (indexDir)); Analysator Analyzer = neuer StandardAnalyzer (); // Standard Word -Teiler // Smartchineanalyzer Analyzer = new SmartChineanalyzer (); IndexWriterConfig IWC = New IndexWriterConfig (Analyzer); writer = neuer Indexwriter (Dir, IWC); }
Legen Sie das Indexfeld fest, und der Speicher gibt an, ob der Indexinhalt gespeichert ist: Dateiname und FullPath nehmen weniger Speicher ein und können gespeichert werden, um die Abfragerendite zu erleichtern.
private document getDocument (Datei f) löst Ausnahme aus {document doc = new document (); doc.add (neues Textfeld ("Inhalt", New FileReader (f))); doc.add (neues Textfeld ("Dateiname", f.getName (), store.yes)); doc.add (neues Textfeld ("fullPath", f.getCanonicalPath (), store.yes)); // Pfadindex return doc; }Das Ergebnis nach der Ausführung des Hauptcodes ist in der Abbildung angezeigt: Beim Indizieren einer Datei gibt das Design die Datei "Indexdatei: + Dateipfad" zurück und berechnet die Zeit, die für die Ausgabe des Index aller Dateien benötigt wird.
4.3 Löschen und ändern Sie den Index
Im Allgemeinen umfassen Operationen auf Datenbanken CRUD (hinzufügen, löschen, ändern, abfrage). Hinzufügen bedeutet, Indexelemente auszuwählen und zu erstellen. Die Abfrage als Kernfunktion wird später diskutiert. Hier zeichnen wir hauptsächlich die Methoden auf, die beim Löschen und Aktualisieren von Indizes verwendet werden.
Die Löschung ist in zwei Arten unterteilt, einschließlich der gewöhnlichen Löschung und der vollständigen Löschung, da die Löschung des Index die gesamte Datenbank beeinflusst. Darüber hinaus bedeutet das Löschen von Indizes für große Systeme das Ändern der zugrunde liegenden Schicht des Systems, die zeitaufwändig und arbeitsintensiv ist und nicht zurückgegeben werden kann. Als der Index erstmals indiziert wurde, wurden nach der Festlegung des Index mehrere kleine Dateien generiert. Bei der Suche wird jede Datei zusammengeführt und dann gesucht. Die gewöhnliche Löschung ist nur eine einfache Kennzeichnung des zuvor etablierten Index, wodurch es unmöglich ist, zu suchen und zurückzukehren. Vollständige Löschung bedeutet, den Index zu zerstören und kann nicht widerrufen werden. Nehmen Sie das Beispiel für das Löschen eines Index mit der Indexelement "ID" von 1:
Normale Löschung (vor dem Zusammenführen löschen):
writer.deletedocuments (neuer Begriff ("ID", "1")); writer.commit ();Vollständig löschen (nach dem Zusammenführen löschen):
writer.deletedocuments (neuer Begriff ("id", "1"); writer.forcemergedeletes (); // Force Delete writer.commit ();Das Prinzip der Änderung des Index ist relativ einfach, nämlich die Umsetzung der Abdeckung auf der Grundlage des ursprünglichen Index. Der Implementierungscode entspricht der Zugabe des Index im obigen Text. Ich werde es hier nicht erklären.
4.4 Gewichtung von Indizes
Lucene wird standardmäßig nach Relevanz sortiert. Lucene liefert Feld einen Steigerungsparameter, der eingestellt werden kann. Dieser Parameter wird verwendet, um die Bedeutung von Datensätzen anzuzeigen. Wenn die Suchbedingungen erfüllt sind, werden Aufzeichnungen mit hoher Bedeutung Priorität und das Rückgabeergebnis werden übertroffen. Wenn es viele Datensätze gibt, werden Datensätze mit geringem Gewicht hinter der Homepage eingestuft. Daher ist der Gewichtungsvorgang im Index ein wichtiger Faktor, der die Zufriedenheit des Rückgabeergebnisses beeinflusst. Bei der Tatsache, dass das Informationssystem tatsächlich entworfen wird, sollten strenge Formeln zur Gewichtsberechnung vorhanden sein, um die Änderung des Feldgewichts zu erleichtern und die Bedürfnisse der Benutzer besser zu erfüllen.
Beispielsweise haben Suchmaschinen eine hohe Klickrate, und die Webseiten, die mit und beendet sind, werden bei der Rückgabe erster Seite eingestuft. Der Implementierungscode ist in Abbildung 4-1 dargestellt, und die ungewichteten Summe gewichteten Ergebnispaare sind in Abbildung 4-2 dargestellt.
Textfield field = new textfield ("fullPath", f.getCanonicalPath (), store.yes); if ("a Great Trief.txt" .Equals (f.getName ()) {field.setboost (2.0f); // Gewicht den Fullwad -Pfad mit dem Dateinamen Second Story.txt; } // Das Standardgewicht beträgt 1,0 und wechselt auf 1,2, um das Gewicht zu erhöhen. doc.add (Feld);Abbildung 4-1: Indexgewichtung
Abbildung 4-2: Vor dem Gewicht
Abbildung 4-2: Nach dem Gewicht
Wie aus den Ergebnissen von Abbildung 4-2 hervorgeht, wird es beim Gewicht in Wörterbuchreihenfolge zurückgegeben. Daher wird vor dem zweiten die erste gewichtet und die Reihenfolge der mit dem Namen Sekunde bezeichneten Datei geändert, wenn die Rückgabe zurückgegeben wird, wodurch der Test des Gewichts realisiert wird.
5 eine Anfrage durchführen
Die Suchschnittstelle von Lucene besteht hauptsächlich aus drei Klassen: Queryparser, Indexsearcher und Hits. QueryParser ist ein Abfrageparser, der für die Parsen von von Benutzern übermittelten Abfrage -Keywords verantwortlich ist. Beim Erstellen eines neuen Parsers müssen Sie die zu analysierende Domäne und den zu verwendenden Sprachanalysator angeben. Der hier verwendete Sprachanalysator muss der gleiche wie der Parser sein, der bei der Festlegung der Indexbibliothek verwendet wird. Andernfalls ist das Abfrageergebnis falsch. IndexSearcher ist ein Indexsucher. Wenn Sie den Indexsearcher instanziieren, müssen Sie das Verzeichnis angeben, in dem sich die Indexbibliothek befindet. IndexSearcher verfügt über eine Suchmethode, um die Indexsuche durchzuführen. Diese Methode akzeptiert die Abfrage als Parameter und gibt Treffer zurück. Hists ist eine Sammlung einer Reihe sortierter Abfrageergebnisse. Das Element der Sammlung ist Dokument. Durch die Dokumentmethode GET können Sie Informationen über die diesem Dokument entsprechende Datei erhalten, wie z. B. Dateiname, Dateipfad, Dateiinhalt usw.
5.1 Grundabfrage
Wie in der Abbildung gezeigt, gibt es zwei wichtige Möglichkeiten zum Abfragen. Es wird jedoch empfohlen, die erste Art des Konstruktions -Queryparser -Ausdrucks zu verwenden, der flexible Kombinationen aufweisen kann, einschließlich boolescher logischer Ausdruck, Fuzzy -Matching usw., aber der zweite Typ -Begriff kann nur für Vokabularabfragen verwendet werden.
1. Konstruieren Sie die Queryparser -Abfrageform:
QueryParser parser = new QueryParser ("FullPath", Analyzer); Query query = parser.Parse (q);2. Fragen nach bestimmten Elementen:
Begriff t = neuer Term ("Dateiname", q); Abfrage query = new TermQuery (t);Das Abfrageergebnis ist in Abbildung 5-1 dargestellt: Nehmen Sie den Dateinamen-Dateinamen, der "Big" als Beispiel enthält.
Abbildung 5-1: "große" Abfrageergebnisse
5.2 Fuzzy -Abfrage
Bei der Erstellung von QueryParser kann eine präzise Übereinstimmung und Fuzzy -Matching erreicht werden, indem der Begriff q geändert wird. Fuzzy -Matching wird durch Hinzufügen von "~" nach "q" modifiziert. Wie in Abbildung 5-2 gezeigt:
Abbildung 5-2: Fuzzy-Matching
5.3 Qualifizierte Bedingungsfrage
Boolesche logische Abfrage und Fuzzy -Abfrage müssen nur das Abfragewort Q ändern, während eine begrenzte bedingte Abfrage den Abfrageausdruck festlegen muss, der hauptsächlich in die folgenden Kategorien unterteilt ist:
Es handelt sich um eine angegebene Elementbereichsuche, ein angegebener Zahlenbereich, ein angegebener String-Beginn und eine Multi-Konditions-Abfrage, in der die angewandten Abfragen aufgelistet sind. Der wahre Parameter bezieht sich darauf, ob die oberen und unteren Grenzen enthalten sind.
Geben Sie den Artikelbereich an:
TermRangeQuery query = new TermRangeQuery ("Desc", New ByteRef ("B" .GetByTes ()), New ByteRef ("C" .GetBytes ()), wahr, wahr);Geben Sie den Zahlenbereich an:
NumericRangeQuery <Ganzzahl> query = numericRangeQuery.NewinTrange ("id", 1, 2, true, true);Geben Sie den Beginn der Zeichenfolge an:
PräfixQuery query = neues PräfixQuery (neuer Begriff ("Stadt", "a"));Multi-Kondition-Abfrage:
NumericRangeQuery <Gefeger> query1 = numericRangeQuery.NewinTrange ("ID", 1, 2, true, true); PräfixQuery query2 = neues Präfixquery (neuer Begriff ("Stadt", "a"); booleanQuery.builder BooleanQuery = new BooleanQuery.builder (); booleanQuery.add (query1, booleanclause.occur.must); booleanQuery.add (query2, booleanclause.occur.must);5.4 Highlight -Abfrage
In Suchmaschinen wie Baidu und Google wird die zurückgegebene Webseite bei Abfragen rot angezeigt, wenn sie Abfrage -Schlüsselwörter enthält und zusammenfassend angezeigt wird, dh einige Inhalte, die die Schlüsselwörter enthalten, werden abgefangen und zurückgegeben. Highlight -Abfrage besteht darin, die Stiländerungen an Schlüsselwörtern zu erkennen. Dieses Experiment wird in MyeClipse durchgeführt. Bei der Rückgabe des Ergebnisses wird es keine Stiländerungen geben. Es werden nur HTML -Tags zu den Schlüsselwörtern hinzugefügt, die den Inhalt zurückgeben. Wenn auf der Webseite angezeigt wird, erfolgen die Stiländerungen.
Der hervorgehobene Einstellcode ist in Abbildung 5-3 dargestellt und die Ergebnisse sind in Abbildung 5-4 dargestellt. Die Nanjing -Matching -Wörter werden hinzugefügt und gekennzeichnet, die fett und rot sind, wenn sie auf der Webseite angezeigt werden.
QueryScorer scorer = neuer queryScorer (query); Fragmenter Fragmenter = new SimpleSpanFragmenter (Scorer); SimpleHtmlFormatter SimpleHtmlFormatter = new SimpleHtmlFormatter ("<b> <Schriftfarbe Torschütze); Highlighter.SetTextFagmenter (Fragmenter);Abbildung 5-3: Highlight-Einstellungen
Abbildung 5-4: Markieren Sie die Ergebnisse
6 Probleme und Mängel, die während des Experiments auftreten
Die Lucene -Version wird schnell aktualisiert, und zwischen der JDK -Version, der Eclipse -Version und der Lucene -Version wird eine gute Verbindung benötigt, ansonsten wird sie viel Inkompatibilität verursachen. In der Debug -Version und der Auswahl von JDK1.6 und JDK1.8 gibt es viele Schwierigkeiten. Beispielsweise wurde die Append -Methode im Web -Crawling in Version 1.8 gelöscht und kann nicht verwendet werden. Das Lesen der Dokumentenpfadkraft fsdirectory.open () erfordert jedoch, dass JDK1.8 es unterstützt.
Die Mängel dieses Experiments spiegeln sich hauptsächlich in:
Der Code ist weniger flexibel. Wenn Sie Webseiten kriechen, muss es manuell erfolgen und auf Chinesisch und Englisch separat erfolgen. Der Code sollte so verbessert werden, dass ein Urteil über die Sprache der Webseite vorliegt und dann automatisch verschiedene Wortsegmentierer ausgewählt und ausführt.
Der Code hat eine geringe Wiederverwendbarkeit und keine vernünftigere Klassifizierung und Methodenkonstruktion. Der Einfachheit halber wird der Effekt im Grunde genommen durch Annotieren und Markieren in mehreren Kerncodes erreicht, die verbessert werden müssen.
Der Code hat eine geringe Portabilität, und das Krabbeln von Webseiten verwendet die JDK1.6 -Version, und die Implementierung von Lucene verwendet die JDK1.8 -Version. Beim Exportieren in andere Maschinen muss die Umgebung geringfügig geändert und konfiguriert werden, und One-Click-Betrieb kann nicht erreicht werden.
7 Zusammenfassung
Basierend auf den Prinzipien von Lucene versteht dieser Artikel die Ideen und Methoden der Volltext-Suche und führt Experimente und Tests zu häufig verwendeten Funktionen durch. Während des Experiments lernte ich die Prinzipien von Suchmaschinen kennen und hatte eine bessere praktische Erfahrung, die auf dem Inhalt des Informationsabrufkurses basiert. Lucene ist ein ausgezeichnetes Open -Source -Rahmen für die Suchtechnologie. Durch eingehende Forschungen darüber sind wir mit seinem Implementierungsmechanismus besser vertraut. Beim Studium haben wir viele objektorientierte Programmiermethoden und -ideen gelernt. Sein guter Systemrahmen und seine Skalierbarkeit sind es wert, gelernt zu werden.