Heim > Java > javaLernprogramm > Hauptteil

Ausführliche Erläuterung der Lucene-Konfiguration sowie des Bild- und Textcodes zum Erstellen von Indexen und zum Abrufen von Volltexten

黄舟
Freigeben: 2017-09-06 10:03:01
Original
1557 Leute haben es durchsucht

Lucene


ist ein Open-Source-Volltextsuchmaschinen-Toolkit, aber keine vollständige Volltextsuchmaschine, sondern eine Volltextsuchmaschinenarchitektur, die eine vollständige Abfragemaschine bereitstellt und Indexierungs-Engine, teilweise Textanalyse-Engine (zwei westliche Sprachen, Englisch und Deutsch). Der Zweck von Lucene besteht darin, Softwareentwicklern ein einfaches und benutzerfreundliches Toolkit zur Verfügung zu stellen, mit dem sie die Volltextsuchfunktion einfach im Zielsystem implementieren oder darauf basierend eine vollständige Volltextsuchmaschine erstellen können.

Vorteile


(1) Das Indexdateiformat ist unabhängig von der Anwendungsplattform. Lucene definiert eine Reihe von 8-Bit-Byte-basierten Indexdateiformaten, damit kompatible Systeme oder Anwendungen auf verschiedenen Plattformen die erstellten Indexdateien gemeinsam nutzen können.

(2) Basierend auf dem invertierten Index der herkömmlichen Volltextsuchmaschine wird eine Blockindizierung implementiert, mit der kleine Dateiindizes für neue Dateien erstellt und die Indizierungsgeschwindigkeit verbessert werden können. Durch die Zusammenführung mit dem ursprünglichen Index wird dann der Zweck der Optimierung erreicht.

(3) Die hervorragende objektorientierte Systemarchitektur erleichtert das Erlernen von Lucene-Erweiterungen und erleichtert die Erweiterung neuer Funktionen.

(4) Entwarf eine Textanalyseschnittstelle, die unabhängig von Sprache und Dateiformat ist. Der Indexer schließt die Erstellung von Indexdateien ab, indem er den Token-Stream akzeptiert. Benutzer müssen lediglich Textanalyseschnittstellen implementieren, um neue Sprachen zu erweitern ​und Dateiformate.

(5) Eine Reihe leistungsstarker Abfrage-Engines wurde standardmäßig implementiert. Benutzer müssen keinen eigenen Code schreiben, um dem System die Implementierung leistungsstarker Abfragefunktionen zu ermöglichen Standard (Fuzzy-Suche[11]), Gruppenabfrage usw.

Konzept


Zunächst können Sie sich dieses Bild ansehen, das schon seit langem im Umlauf ist :

Links: Es handelt sich um die Sammlung verschiedener Daten, z. B. Online, Text, Datenbank usw., und die gesammelten Daten werden über Lucene indiziert

Rechts: Es ist der Benutzer durch Einige Suchvorgänge sind nach der Indizierung ein Prozess, bei dem Ergebnisse zurückgegeben werden

Lucene-Konfiguration


Es ist sehr einfach, ein paar JAR-Pakete zu importieren und eine Indexdatei zu erstellen

Ich bin Verwenden Sie die neueste Version des 6.6.0-Kernpakets: lucene-core-6.6.0.jar. Sie können es von der offiziellen Website http://lucene.apache.org/ herunterladen. Dieses Paket reicht zum Testen aus.

Die Indexdatei lautet: index Sie können diesen Dateinamen nach Belieben wählen, da der darin enthaltene Inhalt automatisch generiert wird. Wenn Sie interessiert sind, können Sie das Tool online herunterladen , Sie können es versuchen

Dieses JAR-Paket: IKAnalyzer6.5.0.jar ist jedoch ein Erweiterungspaket für die Wortsegmentierungsverarbeitung des Analysators und unterstützt die chinesische Wortsegmentierung. Diese beiden Verzeichnisse befinden sich auf derselben Ebene wie das src-Verzeichnis

Beginnen wir ohne weitere Umschweife mit dem Code:

Zunächst benötigen wir, basierend auf der Lucene-Konzeptkarte oben Um zuerst einen Index zu erstellen, müssen sie tatsächlich verarbeitet werden. Sie können auf diese Weise sehen, dass die Inhaltsdateien in Ihrem Der Index wurde erstellt.

public static void createindex() throws Exception {
        //创建文件目录    创建在项目目录下的index中
        Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/index"));
        //分词处理         是一个抽象类 一种单字分词,标准的
        Analyzer analyzer=new IKAnalyzer();
        //创建IndexWriterConfig对象
        IndexWriterConfig config=new IndexWriterConfig(analyzer);
        //创建IndexWriter对象
        IndexWriter iWriter=new IndexWriter(dir, config);
        //清除之前的索引
        iWriter.deleteAll();
                //创建文档对象
        Document doc=new Document();
        //向文档中添加文本内容字段,及字段类型
        doc.add(new Field("fieldname","坚持到底gl博主的博文,转载请注释出处", TextField.TYPE_STORED));
        //将文档添加到indexWriter中,写入索引文件中
        iWriter.addDocument(doc);
                //关闭写入    
                iWriter.close();        
}
Nach dem Login kopieren
Der Index wurde erstellt. Versuchen Sie als Nächstes, den Index abzufragen und die Wörter einzugeben, die abgefragt werden müssen.

Einfach so , ein Volltextsuchtest ist herausgekommen, erweitere ihn

public static void search(String string) throws Exception {
    
        Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/search"));
        //打开索引目录的
        DirectoryReader dReader=DirectoryReader.open(dir);
        IndexSearcher searcher=new IndexSearcher(dReader);
        //第一个参数 field值 ,第二个参数用户需要检索的字符串
        Term t=new Term("fieldname",string);
        //将用户需要索引的字符串封装成lucene能识别的内容 
        Query query=new TermQuery(t);
        //查询,最大的返回值10
        TopDocs top=searcher.search(query, 10);
                //命中数,那个字段命中,命中的字段有几个
        System.out.println("命中数:"+top.totalHits);
               //查询返回的doc数组
        ScoreDoc[]    sDocs= top.scoreDocs;   
            for (ScoreDoc scoreDoc : sDocs) {
                //输出命中字段内容
        System.out.println(searcher.doc(scoreDoc.doc).get(field));
}
}
Nach dem Login kopieren
und füge zum Verständnis einen weiteren Code hinzu:

public static void main(String[] args) throws Exception {
        String chString="坚持到底的文章,转载请注释出处";
        Analyzer analyzer=new IKAnalyzer();
        TokenStream stream=analyzer.tokenStream("word", chString);
        stream.reset();
        CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class);
        while (stream.incrementToken()) {
            System.out.println(cta.toString());
        }
        stream.close();
    }
Nach dem Login kopieren
Sie können auch diese wenigen Dateien hinzufügen. Eine Sache, auf die Sie achten müssen, ist, dass Sie auf Ihr Codierungsformat achten sollten

Die erste: ext.dic Erweitertes Wörterbuch, in dem die Wortsegmentierung gruppiert werden muss, z. B.: Die Wortsegmentierungsverarbeitung kann die vier Zeichen „am Ende festhalten“ in „Beharrlichkeit“ und „Beharrlichkeit“ unterteilen. Sie können hier direkt Beharrlichkeit zum Ende hinzufügen Datei zum Anzeigen des Ausdauerindex

Die dritte: stopword.dic erweitertes Stoppwörterbuch in der Wortsegmentierung Wenn Sie nicht möchten, dass es angezeigt wird, möchten Sie nicht, dass es separat oder allein angezeigt wird kann es hineinschreiben, und bei der Suche wird kein

angezeigt. Das zweite: gibt die beiden oben genannten erweiterten Wörterbücher an

Dies sind die grundlegendsten Inhalte zu beherrschen, und es gibt viele Arten von Wortsegmentierungsalgorithmen, die erweitert werden müssen

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Lucene-Konfiguration sowie des Bild- und Textcodes zum Erstellen von Indexen und zum Abrufen von Volltexten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage