English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Einleitung
Mit der Entwicklung des World Wide Webs und der Ankunft der Ära der großen Daten gibt es jeden Tag eine massive Produktion, Speicherung, Übermittlung und Transformation digitaler Informationen. Wie man aus der großen Menge an Informationen auf eine bestimmte Weise Informationen findet, die den eigenen Bedürfnissen entsprechen, sie zu ordnen und zu nutzen, ist eine große Herausforderung. Die Volltextsuchtechnologie ist derzeit die am weitesten verbreitete Anwendung für die Informationssuche. Im Leben nutzen wir Suchmaschinen, um Informationen in Blogs und Foren zu finden, und die Kern原理 dieser Suchanwendungen ist die Volltextsuchtechnologie, die in diesem Artikel vorgestellt wird. Mit der Digitalisierung von Dokumenteninformationen ist es für jede Firma, jeden Betrieb und jede Einrichtung unerlässlich, Informationen effektiv zu speichern und rechtzeitig und genau zu extrahieren. Es gibt viele reife Theorien und Methoden für die Volltextsuche auf Englisch, und die Open-Source-Volltextsuchmaschine Lucene ist ein Unterprojekt des Jakarta-Projekts der Apache Software Foundation. Ihr Ziel ist es, Softwareentwicklern ein einfaches und benutzerfreundliches Toolkit bereitzustellen, um die Funktion der Volltextsuche in Zielssystemen zu implementieren. Lucene unterstützt Chinesisch nicht, aber es gibt viele Open-Source-Chinesisch-Segmentierer, die das Indexieren von chinesischen Inhalten ermöglichen. Dieser Artikel realisiert auf der Grundlage der Untersuchung der Kernprinzipien von Lucene die Crawling und Suche für chinesische und englische Webseiten.
1 Lucene-Präsentation
1.1 Lucene-Übersicht
Lucene ist ein mit Java geschriebenes Toolpaket für die Volltextsuche, das die beiden Kernfunktionen Indexierung und Suchen implementiert und diese voneinander unabhängig hält, was es Entwicklern ermöglicht, leicht zu erweitern. Lucene bietet reichhaltige API, um eine einfache Interaktion mit den in den Indizes gespeicherten Informationen zu ermöglichen. Zu beachten ist, dass es nicht eine vollständige Volltextsucheanwendung ist, sondern nur die Indexierung und Suchfunktionen für Anwendungen bereitstellt. Um Lucene tatsächlich in Aktion zu setzen, sind einige notwendige Zweidevelopment erforderlich.
Die Strukturdesign von Lucene ist ähnlich dem von Datenbanken, aber die Indizes von Lucene und Datenbanken unterscheiden sich erheblich. Beide Datenbanken und Lucene erstellen Indizes, um die Suche zu erleichtern, aber Datenbanken richten sich nur auf einige Felder und müssen die Daten in formatierte Informationen umwandeln und speichern. Die Volltextsuche indexiert alle Informationen auf eine bestimmte Weise. Die Unterschiede und Ähnlichkeiten der beiden Sucharten sind in der Tabelle dargestellt1-1gezeigt.
Tabelle1-1:Vergleich der Datenbankrecherche und der Lucene-Recherche
Vergleichswert |
Lucene-Recherche |
Datenbankrecherche |
Datenrecherche |
Aus Lucene-Indexdateien extrahiert |
Durch Datenbankindex-Aufzeichnungen abgerufen |
Indexstruktur |
Document(Dokument) |
Record(Aufzeichnung) |
Abfrageergebnis |
Hit: Dokumente, die die Beziehung erfüllen, bestehen |
Abfrageergebnis-Satz: Aufzeichnungen, die Schlüsselwörter enthalten, bestehen |
Volltextsuche |
Unterstützt |
Nicht unterstützt |
模糊查询 |
Unterstützt |
Nicht unterstützt |
Ergebnis-Sortierung |
Gewichtung einstellen, um eine Relevanzsortierung durchzuführen |
Kann nicht sortiert werden |
1.2 Lucene-Overallstruktur
Die Veröffentlichungsform des Lucene-Softwarepakets ist eine JAR-Datei, die Versionen schnell aktualisiert und erhebliche Versionssprünge aufweist, in diesem Artikel wird die Version5.3.1Version, hauptsächlich verwendete Unterpakete wie in der Tabelle1-2gezeigt.
Tabelle1-2:Unterpaket und Funktion
Paketname |
Funktion |
Org .apache.lucene .analysis |
Tokenisierung |
Org .apache.lucene .document |
Dokumente, die Indexverwaltung betreffen |
Org .apache.lucene .index |
Indexoperationen, einschließlich Hinzufügen, Löschen usw. |
Org .apache.lucene .queryParser |
Sucher, Suchausdrücke konstruieren |
Org .apache.lucene .search |
Suchverwaltung |
Org .apache.lucene .store |
Datenbankverwaltung |
Org .apache.lucene .util |
Öffentliche Klasse |
1.3 lucene Architekturdesign
Lucene ist sehr leistungsstark, aber im Wesentlichen besteht es aus zwei Teilen: erstens das Einlagern von Token nach dem Schneiden von Textinhalten in die Bibliothek; zweitens die Rückgabe von Ergebnissen basierend auf den Suchkriterien, d.h. das Erstellen von Indizes und die Durchführung von Abfragen.
Wie das Bild1-1Gezeigt, dieses Dokument stellt externe Schnittstellen und Informationsquellen heraus und konzentriert sich auf die Indizierung und Abfrage von Textinhalten der Webseiten-Spider.
Bild1-1:Architekturdesign von Lucene
2 JDK-Installation und Konfiguration der Umgebungsvariablen
1.Download von JDK:
Laden Sie auf der Website von Oracle den komprimierten Ordner, der mit dem Systemkompatibilität übereinstimmt, herunter. Klicken Sie auf Installieren und folgen Sie den Anweisungen, um zu installieren. Während der Installation wird gefragt, ob JRE installiert werden soll, klicken Sie auf Ja.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.Umgebungsvariablen einrichten:
(1)Mit der rechten Maustaste auf den Computer klicken=》Eigenschaften=》Erweiterte Systemeinstellungen=》Umgebungsvariablen=》Systemvariablen=》Neu=》JAVA_HOME: Installationspfad
(2)Path hinzufügen=》%JAVA_HOME%\bin
3.Testen Sie, ob der Erfolg erreicht wurde:
Start=》Ausführen=》CMD Enter In dem sich öffnenden DOS-Fenster
Eingabe: java -version zeigt Versionsinformationen an,
Eingabe: javac erscheint die Verwendungsinformationen von javac
Es erscheint wie das Bild2-1Gezeigt wird der Erfolg.
Bild2-1cmd-Befehlsfeld testen Sie die Java-Konfiguration
3 Java-Code schreiben, um den Inhalt von Webseiten zu erhalten
Weil Lucene für verschiedene Sprachen unterschiedliche Tokenizer verwendet, verwendet Englisch den Standard-Tokenizer, und Chinesisch wählt den smartcn-Tokenizer. Beim Abrufen von Webseiten wird zunächst die Webseite als html-Datei gespeichert, und in html wird durch die Interferenz von Tags wie dem die Suchleistung beeinträchtigt, daher müssen die html-Tags entfernt und der Textinhalt in eine txt-Datei konvertiert und gespeichert werden. Chinesisch und Englisch sind im Wesentlichen identisch, was die Tokenizer betrifft, daher werden之后的代码和实验结果演示任选其一。本文以五十篇中文故事和英文故事的网页为例。
Das spezifische Code-Design wird wie folgt gezeigt: Url2Html.java speichert die von der URL empfangene Webseite als html-Datei, Html2Txt.java implementiert das Entfernen von html-Dokumentetiketten und speichert es als txt-Dokument. Das spezifische Code wird wie folgt gezeigt3-1und3-2.
public void way(String filePath,String url) throws Exception{ File dest = new File(filePath);//Erstellen Sie eine Datei InputStream is;//Empfangen Sie den Byte-Eingabestrom FileOutputStream fos = new FileOutputStream(dest);//Byte-Ausgabestrom URL wangzhi = new URL(url);//Setzen Sie die URL-Adresse is = wangzhi.openStream(); BufferedInputStream bis = new BufferedInputStream(is);//Fügen Sie dem Byte-Eingabestrom einen Puffer hinzu BufferedOutputStream bos = new BufferedOutputStream(fos);//Fügen Sie dem Byte-Ausgabestrom einen Puffer hinzu /* * Lesen von Bytes */ int length; byte[] bytes = new byte[1024*20]; while((length = bis.read(bytes, 0, bytes.length)) != -1{ fos.write(bytes, 0, length); } /* * Schließen Sie Puffer- und Eingabe-/Ausgabestrom */ bos.close(); fos.close(); bis.close(); is.close(); }
public String getBody(String val){ String zyf = val.replaceAll("<",/?[^>]+>", ""); //Entfernen Sie die <html>-Tags return zyf; } public void writeTxt(String Str,String writePath) {}} File writename = new File(writePath); try { writename.createNewFile(); BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write(Str); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } }
Nehmen Sie die Webseite der Fabelgeschichte "Dummlöwe zur Schule gehen" als Beispiel, die Dokumentpfade sind auf "E:\work \lucene \test \data \html" und "E:\work\lucene\test\data\txt" eingestellt. Bei jeder Leseoperation der Webseite müssen die beiden zu setzenden Parameter Dateinamen filename und Ziel-URL url festgelegt werden. Erstellen Sie eine neue main-Funktion, um die beiden Methoden aufzurufen. Die spezifische Implementierung ist wie im Bild gezeigt3-3所示:
public static void main(String[] args) { String filename = "jingdizhi";//Dateiname String url = "http://www.51test.net/show/8072125.html";//Die URL der zu durchsuchenden Webseite String filePath = "E:\\work\\lucene\\test\\data\\html\\"+filename+.html;//Schreiben Sie den Dateipfad von html+Dateiname String writePath = "E:\\work\\lucene\\test\\data\\txt\\"+filename+.txt;//Schreiben Sie den Dateipfad von txt+Dateiname Url2Html url2html = new Url2Html(); try { url2html.way(filePath,url); } catch (Exception e) { e.printStackTrace(); } Html2Txt html2txt = new Html2Txt(); String read=html2txt.readfile(filePath);//Lesen Sie die HTML-Datei String txt = html2txt.getBody(read);//Entfernen Sie die HTML-Tags System.out.println(txt); try { html2txt.writeTxt(txt,writePath); } catch (Exception e) { e.printStackTrace(); } }
Nach dem Ausführen des Programms werden "Bärfraß auf der Schule.html" und "Bärfraß auf der Schule.txt" in zwei Verzeichnissen erstellt.
4 Index erstellen
Grundlagen der Indexierung und Suche:
Index erstellen: Der Index der Suchmaschine ist die Implementierung des "Wortes-Die spezifische Datenstruktur des "Dokumentenmatrizes". Es ist auch der erste Schritt der Volltextsuche, Lucene bietet die Klasse IndexWriter zur Verwaltung von Indizes,主要包括add()、delete()、update()。Es gibt auch die Einstellung der Gewichtung, durch die Einstellung verschiedener Indexgewichtungen kann bei der Suche nach der Relevanzgröße der Rückgabe basiert werden.
Durchsuchen: Die ursprüngliche direkte Suche ist eine sequentielle Suche nach Dokumenten, nach dem Erstellen des Indexes kann durch die Suche im Index der Position des Indexworts im Dokument gefunden werden, und dann wird die Position und das Wort des Indexeintrags im Dokument zurückgegeben. Lucene bietet die Klasse IndexSearcher zur Dokumentensuche, die Suchformen hauptsächlich in zwei Kategorien unterteilt, erstens: Term, die Suche nach einem einzelnen Wort; zweitens: Parser, der eine benutzerdefinierte Suchausdrucksstruktur erstellen kann, mit vielen Suchformen, die spezifischen Methoden werden in der nachfolgenden Demonstration implementiert.
4.1 Experimentsumgebung
Dieser PC verwendet Windows 10x64Betriebssystem8G Arbeitsspeicher256G SSD-Festplatte. Die EntwicklungsUmgebung ist Myeclipse 10, JDK-Version1.8. Während des Experiments aufgrund der Umwandlung einiger Grammatiken, einige Klassen verwenden1.6Version Implementierung.
4.2 Index erstellen
Der Aufbau eines Indexes ist das Hinzufügen von Einträgen zu einem Index, Lucene bietet eine Schnittstelle zum Hinzufügen von Indizes. Index hinzufügen.
wird hauptsächlich "Schreib-Indexer", "Dokument", "Domäne" verwendet3 Klasse. Um einen Index zu erstellen, muss zunächst ein Dokumentobjekt Document erstellt werden, die verschiedenen Domänen des Dokuments bestimmt werden, was der Erstellung einer Tabelle in einer relationellen Datenbank ähnelt, Document entspricht einer Zeile in einer Tabelle, die Domäne einer Spalte in einer Zeile, in Lucene kann für die Anforderungen an die Attribute und Daten der verschiedenen Domänen auch verschiedene Indizes für die Domänen ausgewählt werden./Speicherfeldregeln, in diesem Experiment werden der Dateiname fileName, der Dateipfad fullPath und der Textinhalt content als Domäne des Dokuments verwendet.
IndexWriter ist verantwortlich für die Aufnahme neuer Dokumente und das Schreiben in die Indexdatei. Beim Erstellen des "Schreib-Indexers" IndexWriter ist die zu verwendende Sprachanalyse zu spezifizieren. Das Erstellen von Indizes gliedert sich in zwei Kategorien: erstens: ungewichteter Index; zweitens: gewichteter Index.
public Indexer(String indexDir) throws Exception{ Directory dir = FSDirectory.open(Paths.get(indexDir)); Analyzer analyzer = new StandardAnalyzer(); // Standardsegmentierer //SmartChineseAnalyzer analyzer = new SmartChineseAnalyzer(); IndexWriterConfig iwc = new IndexWriterConfig(analyzer); writer = new IndexWriter(dir, iwc); }
Einrichtung der Indexfelder, Store zeigt an, ob der Indexinhalt gespeichert wird: fileName und fullPath verbrauchen weniger Speicher und können gespeichert werden, um die Suche und Rückgabe zu erleichtern.
private Document getDocument(File f) throws Exception { Document doc = new Document(); doc.add(new TextField("contents", new FileReader(f))); doc.add(new TextField("fileName", f.getName(), Store.YES)); doc.add(new TextField("fullPath", f.getCanonicalPath(), Store.YES));//Pfadeindekser return doc; }
Nach der Ausführung des Hauptcodes sind die Ergebnisse wie folgt gezeigt: Bei der Gestaltung eines Indexdateifiles wird das Dateifile "Indexdatei": zurückgegeben+Pfad der Datei und berechnet die Zeit, die für die Ausgabe aller Indexdateien aufgewendet wird.
4.3 Löschung und Änderung von Indizes
Allgemeine Operationen auf Datenbanken umfassen CRUD (Hinzufügen, Löschen, Ändern, Abfragen), das Hinzufügen bedeutet die Auswahl und Erstellung von Indexfeldern, die Abfrage als zentrale Funktion wird später erörtert, hier wird hauptsächlich auf die Methoden eingegangen, die bei der Löschung und Aktualisierung von Indizes verwendet werden.
Löschung erfolgt in zwei Arten, einschließlich der normalen Löschung und der vollständigen Löschung, da die Löschung von Indizes den gesamten Datenbankbestand beeinflusst und für große Systeme bedeutet, dass die Löschung von Indizes Änderungen an der Unterlage des Systems bedeutet, was Zeit und Mühe kostet und nicht rückgängig gemacht werden kann. Vorher, wenn man die Erstellung von Indizes sah, wurden einige kleine Dateien generiert, und wenn eine Suche durchgeführt wird, werden die verschiedenen Dateien zusammengefasst und gesucht. Die normale Löschung markiert nur die zuvor erstellten Indizes einfach, was dazu führt, dass eine Suche nicht durchgeführt werden kann. Die vollständige Löschung zerstört die Indizes, was nicht rückgängig gemacht werden kann. Mit der Löschung des Indexfelds "id" von1Indizes als Beispiel:
Regelmäßige Löschung (vor Zusammenführen gelöscht):
writer.deleteDocuments(new Term("id","1")); writer.commit();
Vollständige Löschung (nach Zusammenführen gelöscht):
writer.deleteDocuments(new Term("id","1")); writer.forceMergeDeletes(); // Notwendige Löschung writer.commit();
Das Prinzip der Änderung der Indizes ist relativ einfach, nämlich die Überdeckung der bestehenden Indizes zu realisieren, wie im vorherigen Text der Indexerstellung gezeigt, werde ich hier nicht weiter ausführen.
4.4 Gewichtung der Indizes
Lucene sortiert standardmäßig nach Relevanz, Lucene bietet einen Boosting-Parameter für Field an, der verwendet wird, um die Bedeutung der Aufzeichnung anzuzeigen. Wenn die Suchbedingungen erfüllt sind, werden Aufzeichnungen mit hoher Bedeutung priorisiert und die Ergebnisse weiter oben zurückgegeben. Wenn viele Aufzeichnungen vorhanden sind, werden Aufzeichnungen mit niedrigerem Wert nach der ersten Seite sortiert. Daher ist die Gewichtung der Indizes ein wichtiger Faktor, der die Zufriedenheit der Rückgabenergebnisse beeinflusst. Bei der tatsächlichen Design von Informationssystemen sollte eine strenge Wertberechnungsformel vorhanden sein, um die Änderung der Field-Werte zu erleichtern und den Benutzeranforderungen besser gerecht zu werden.
Zum Beispiel geben Suchmaschinen Webseiten mit hoher Klickrate und Linkausgang eine höhere Gewichtung, die bei der Rückgabe auf die erste Seite platziert werden. Das Implementierungscode ist wie in der Abbildung4-1Gezeigt, die Vergleichsresultate von nicht gewichtet und gewichtet sind wie in der Abbildung4-2gezeigt.
TextField field = new TextField("fullPath", f.getCanonicalPath(), Store.YES); if("A GREAT GRIEF.txt".equals(f.getName())){ field.setBoost(2.0f);//Pfad "fullPath" des Dateinamens "secondry story.txt" gewichten; } //Das Standardgewicht beträgt1.0, geändert in1.2d.h. das Gewicht hinzuzufügen. doc.add(field);
Bild4-1: Indexgewichtung
Bild4-2: Vor Gewichtung
Bild4-2: Nach Gewichtung
Abbildung4-2Die Ergebnisse zeigen, dass ohne Gewichtung die Ergebnisse nach alphabetischer Reihenfolge sortiert zurückgegeben werden, daher steht "first" vor "secondry". Nachdem die Pfaddatei "secondry story.txt" gewichtet wurde, ändert sich die Reihenfolge bei der Rückgabe, was die Gewichtung der Reihenfolge testet.
5 Durchsuchen
Die Suchschnittstelle von Lucene besteht hauptsächlich aus QueryParser, IndexSearcher und Hits.3 个类构成,QueryParser 是查询解析器,负责解析用户提交的查询关键字,在新建一个解析器时需要指定要解析的域和使用什么语言分析器,这里使用的语言分析器必须与索引库建立时使用的解析器相同,否则查询结果不正确。IndexSearcher是索引搜索器,在实例化IndexSearcher时需要指定索引库所在的目录,IndexSearcher有一个search 方法执行索引的检索,这个方法接受Query 作为参数,返回Hits,Hits 是一系列排好序的查询结果的集合,集合的元素是Document。通过Document的get 方法可以得到与这个文档对应文件的信息,比如:文件名、文件路径、文件内容等。
5.1 基本查询
如图查询主要有两种方式,但是推荐使用第一种构造QueryParser表达式,它可以有灵活的组合方式,包括布尔逻辑表达、模糊匹配等,但是第二种Term只能针对词汇查询。
1构造QueryParser查询式:
QueryParser parser = new QueryParser("fullPath", analyzer); Query query = parser.parse(q);
2对特定项的查询:
Term t = new Term("fileName", q); Query query = new TermQuery(t);
查询结果如图5-1所示:以查询文件名fileName包含“大”为例。
Bild5-1:“大”查询结果
5.2 模糊查询
在构造QueryParser时,通过对词项q的修改可以实现精确匹配和模糊匹配。模糊匹配通过在“q”之后加“~”进行修改。如图5-2所示:
Bild5-2:模糊匹配
5.3 限定条件查询
布尔逻辑查询和模糊查询只需要对查询词q进行更改,而限定条件查询需要对query表达式进行设定,主要分为以下几类:
分别为指定项范围搜索、指定数字范围、指定字符串开头和多条件查询,分别列出应用的查询,true参数指的:是否包含上限和下限在内。
指定项范围:
TermRangeQuery query = new TermRangeQuery("desc", new BytesRef("b".getBytes()), new BytesRef("c".getBytes()), true, true);
Bestimmte Zahlenbereich:
NumericRangeQuery<Integer> query=NumericRangeQuery.newIntRange("id", 1, 2, true, true);
Bestimmte Zeichenfolge am Anfang:
PrefixQuery query=new PrefixQuery(new Term("city","a"));
Mehrfachbedingungenssuche:
NumericRangeQuery<Integer>query1=NumericRangeQuery.newIntRange("id", 1, 2, true, true); PrefixQuery query2=new PrefixQuery(new Term("city","a")); BooleanQuery.Builder booleanQuery=new BooleanQuery.Builder(); booleanQuery.add(query1,BooleanClause.Occur.MUST); booleanQuery.add(query2,BooleanClause.Occur.MUST);
5.4 Highlight Search
In Suchmaschinen wie Baidu, Google und anderen wird, wenn eine Suche durchgeführt wird und die Suchanfrage im zurückgegebenen Webseiteninhalt enthalten ist, der Suchbegriff rot angezeigt und zusammengefasst dargestellt, d.h. der Text, der den Suchbegriff enthält, wird abgeschnitten und zurückgegeben. Die Highlightierung der Suche bedeutet, dass der Stil des Suchbegriffs geändert wird. In diesem Experiment wird es in myeclipse durchgeführt und das Ergebnis wird keine Stiländerung zeigen, sondern nur die Schlüsselwörter im zurückgegebenen Inhalt mit HTML-Tags versehen, wenn es auf der Webseite angezeigt wird, wird es zu einer Stiländerung führen.
Der Code zur Einstellung der Highlightierung ist wie folgt dargestellt5-3gezeigt, das Ergebnis ist wie folgt5-4gezeigt, wird der zu Peking passenden Suchbegriff mit <b> und <font> markiert, auf der Webseite wird er fett und rot angezeigt.
QueryScorer scorer=new QueryScorer(query); Fragmenter fragmenter=new SimpleSpanFragmenter(scorer); SimpleHTMLFormatter simpleHTMLFormatter=new SimpleHTMLFormatter("<b><font color='red'>","</font></b>"); Highlighter highlighter=new Highlighter(simpleHTMLFormatter, scorer); highlighter.setTextFragmenter(fragmenter);
Bild5-3: Hervorhebungseinstellungen
Bild5-4: Hervorhebung der Ergebnisse
6 Probleme und Mängel, die während des Experiments aufgetreten sind
Lucene-Versionen werden schnell aktualisiert, zwischen JDK-Version, Eclipse-Version und Lucene-Version ist eine gute Verbindung erforderlich, sonst werden viele Inkompatibilitäten verursacht, bei der Debugging-Version und JDK1.6und JDK1.8auf der Auswahl auftreten viele Schwierigkeiten, z.B. die append-Methode im1.8Version wurde gelöscht und kann nicht verwendet werden. Aber das Lesen der Dokumentpfade mit FSDirectory.open() erfordert JDK1.8unterstützt.
Die Hauptmängel dieses Experiments sind hauptsächlich:
Der flexible Code ist relativ niedrig, bei der Web-Crawling müssen manuell durchgeführt werden, und sowohl Chinesisch als auch Englisch müssen getrennt behandelt werden. Es sollte der Code verbessert werden, um die Sprache der Webseiten zu bestimmen, und dann die verschiedenenTokenizer automatisch auszuführen.
Der wiederverwendbare Code ist relativ niedrig, es gibt keine vernünftige Klassifizierung und Methodenstruktur. Aus Gründen der Einfachheit werden die Kommentare und Markierungen hauptsächlich in einigen Kerncodes verwendet, um die Wirkung zu erreichen, was verbessert werden muss.
Der portable Code ist relativ niedrig, die Web-Crawling verwendet JDK1.6Version verwendet Lucene, um JDK zu implementieren1.8Version, um sie auf anderen Maschinen zu exportieren, muss das Umfeld leicht geändert und konfiguriert werden, und eine Ein-Klick-Operation kann nicht realisiert werden.
7 Zusammenfassung
Dieser Artikel beginnt mit den Prinzipien von Lucene und versteht die Überlegungen und Methoden der Volltextsuche. Er führt auch Experimente und Tests mit den häufig verwendeten Funktionen durch. Während des Experiments wurde das Prinzip der Suchmaschinen verstanden und es wurde eine bessere praktische Erfahrung auf dem Hintergrund des Lehrplans des Kurses für Information Retrieval erreicht. Lucene ist eine hervorragende Open-Source-Textsuche-Technologieplattform. Durch die tiefere Forschung in ihm wurde das Implementierungsmechanismus besser verstanden. Während der Forschung wurde viel über objektorientierte Programmiermethoden und Gedanken gelernt. Die gute Systemstruktur und Erweiterbarkeit sind wertvoll zu lernen und zu借鉴.
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Sie übernimmt keine Haftung für rechtliche Fragen. Wenn Sie Inhalte finden, die möglicherweise urheberrechtlich geschützt sind, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden:3codebox.com (Bitte ersetzen Sie # durch @, wenn Sie eine Meldung senden, und fügen Sie relevante Beweise bei. Sobald nachgewiesen wird, dass die Inhalte urheberrechtlich geschützt sind, wird diese Website die fraglichen Inhalte sofort löschen.)