Search can be divided into the following steps:
- Create directory
- Create Indexreader
- Create indexsearch based on Indexreader
- Create a search query
- Search by searcher and return Topdocs
- Get Scoredoc objects based on Topdocs
- Get specific document objects based on searcher and Scoredoc objects
- Get the values you want based on the Document object
Here is the example code:
version 3.5:3.5 version is relatively simple, only the Lucene core package Lucene-core can be, the pom file is as follows:
<project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "Http://www.w3.org/2001/XMLSchema-instance" xsi: schemalocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < Modelversion>4.0.0</modelversion> <groupId>com.darren.lucene35.helloworld</groupId> < Artifactid>lucene35_helloworld</artifactid> <version>0.0.1-SNAPSHOT</version> <packaging >jar</packaging> <name>lucene35_helloworld</name> <url>http://maven.apache.org</ Url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <lucene.version>3.5.0</lucene.version> </properties> <dependencies> <DEPENDENCY&G T <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12& Lt;/version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>${lucene.version}</version> </dependency> </dependencies></project>
The example code is as follows:
Package Com.darren.lucene35;import Java.io.file;import Java.io.filereader;import Org.apache.lucene.analysis.analyzer;import Org.apache.lucene.analysis.standard.standardanalyzer;import Org.apache.lucene.document.document;import Org.apache.lucene.document.field;import Org.apache.lucene.index.indexreader;import Org.apache.lucene.index.indexwriter;import Org.apache.lucene.index.indexwriterconfig;import Org.apache.lucene.queryparser.queryparser;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.store.directory;import Org.apache.lucene.store.fsdirectory;import Org.apache.lucene.util.version;public class HelloLucene {/** * search * * public void Search () {Indexrea Der Indexreader = null; try {//1, create directory directory directory = Fsdirectory.open (new File ("F:/test/lucene/index")); 2. Create IndexreadeR indexreader = indexreader.open (directory); 3, according to Indexreader create Indexsearch indexsearcher indexsearcher = new Indexsearcher (Indexreader); 4. Create search query//Use the default standard word breaker analyzer Analyzer = new StandardAnalyzer (version.lucene_35); In content search Darren//Create parser to determine what to search for, the second parameter is the domain of the search queryparser Queryparser = new Queryparser ( version.lucene_35, "content", analyzer); Create a query that represents the search domain for content containing Darren document query query = Queryparser.parse ("Darren"); 5. Search according to searcher and return topdocs topdocs topdocs = indexsearcher.search (query, 10); 6, according to Topdocs get Scoredoc object scoredoc[] Scoredocs = Topdocs.scoredocs; for (Scoredoc Scoredoc:scoredocs) {///7, Get specific Document object based on searcher and Scoredoc object document Doc Ument = Indexsearcher.doc (Scoredoc.doc); 8. Get the required value according to the Document object SYSTEM.OUT.PRintln (Document.get ("filename") + "" + document.get ("filepath"); }} catch (Exception e) {e.printstacktrace (); } finally {try {if (Indexreader! = null) {Indexreader.clone (); }} catch (Exception e) {e.printstacktrace (); } } }}
version 4.5:
Version 4.5 requires Lucene core Pack Lucene-core and query package Lucene-queryparser, from the 4.0 version after the word breaker is detached from the core package, the Pom file is as follows:
<project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "Http://www.w3.org/2001/XMLSchema-instance" xsi: schemalocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < Modelversion>4.0.0</modelversion> <groupId>com.darren.lucene45.helloworld</groupId> < Artifactid>lucene45_helloworld</artifactid> <version>0.0.1-SNAPSHOT</version> <packaging >jar</packaging> <name>lucene45_helloworld</name> <url>http://maven.apache.org</ Url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <lucene.version>4.5.1</lucene.version> </properties> <dependencies> <DEPENDENCY&G T <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12& Lt;/version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>${lucene.version}</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>${lucene.version}</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>${lucene.version}</version> </dependency> </dependencies></project>
The example code is as follows:
Package Com.darren.lucene45;import Java.io.file;import Java.io.filereader;import Org.apache.lucene.analysis.analyzer;import Org.apache.lucene.analysis.standard.standardanalyzer;import Org.apache.lucene.document.document;import Org.apache.lucene.document.field;import Org.apache.lucene.document.textfield;import Org.apache.lucene.index.directoryreader;import Org.apache.lucene.index.indexwriter;import Org.apache.lucene.index.indexwriterconfig;import Org.apache.lucene.queryparser.classic.queryparser;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.store.directory;import Org.apache.lucene.store.fsdirectory;import Org.apache.lucene.util.version;public class HelloLucene {/** * search * * public void Search () {Director Yreader directoryreader = null; try {//1, create directory directory directory = Fsdirectory.open(New File ("F:/test/lucene/index")); 2. Create Indexreader/** * Note that reader differs from version 3.5: * * So use Directoryreader * * @Deprecated public static Directoryreader open (final directory directory) throws IOException {retur n * Directoryreader.open (directory); }////The following methods are obsolete//Indexreader Indexreader = indexreader.open (directory); Directoryreader = directoryreader.open (directory); 3, according to Indexreader create Indexsearch indexsearcher indexsearcher = new Indexsearcher (Directoryreader); 4. Create search Query Analyzer Analyzer = new StandardAnalyzer (version.lucene_45); /** * Note differs from version 3.5: * * Requires the introduction of the Lucene-queryparser package, since the Lucene-queryparser package from the 4.0 release is detached from the core package *///Create parser to determine the contents of the file to search for, the second parameter is the domain searched queryparser queryparser = new Queryparser (Version.lucen E_45, "Content", analyzer); Create a query that represents the search domain for content containing Darren document query query = Queryparser.parse ("Darren"); 5. Search according to searcher and return topdocs topdocs topdocs = indexsearcher.search (query, 10); 6, according to Topdocs get Scoredoc object scoredoc[] Scoredocs = Topdocs.scoredocs; for (Scoredoc Scoredoc:scoredocs) {///7, Get specific Document object based on searcher and Scoredoc object document Doc Ument = Directoryreader.document (Scoredoc.doc); 8, according to the document object to obtain the desired value SYSTEM.OUT.PRINTLN (document.get ("filename") + "" + document.get ("filepath"); }} catch (Exception e) {e.printstacktrace (); } finally {try {if (Directoryreader! = null) {directoryreader.close (); }} catch (Exception e) {e.printstacktrace (); } } }}
version 5.0:
As with version 5.0 and 4.5, the pom file looks like this:
<project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "Http://www.w3.org/2001/XMLSchema-instance" xsi: schemalocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < Modelversion>4.0.0</modelversion> <groupId>com.darren.lucene50.helloworld</groupId> < Artifactid>lucene50_helloworld</artifactid> <version>0.0.1-SNAPSHOT</version> <packaging >jar</packaging> <name>lucene50_helloworld</name> <url>http://maven.apache.org</ Url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <lucene.version>5.0.0</lucene.version> </properties> <dependencies> <DEPENDENCY&G T <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12& Lt;/version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>${lucene.version}</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>${lucene.version}</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>${lucene.version}</version> </dependency> </dependencies></project>
The example code is as follows:
Package Com.darren.lucene50;import Java.io.file;import Java.io.filereader;import java.nio.file.filesystems;import Org.apache.lucene.analysis.analyzer;import Org.apache.lucene.analysis.standard.standardanalyzer;import Org.apache.lucene.document.document;import Org.apache.lucene.document.field;import Org.apache.lucene.document.textfield;import Org.apache.lucene.index.directoryreader;import Org.apache.lucene.index.indexwriter;import Org.apache.lucene.index.indexwriterconfig;import Org.apache.lucene.queryparser.classic.queryparser;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.store.directory;import Org.apache.lucene.store.fsdirectory;public class HelloLucene {/** * Search */public void search () {Directoryreader directoryreader = null; try {//1, create directory directory directory = Fsdirectory.open (FileSystems.getdefault (). GetPath ("F:/test/lucene/index")); 2. Create Indexreader/** * Note that reader differs from version 3.5: * * So use Directoryreader * * @Deprecated public static Directoryreader open (final directory directory) throws IOException {retur n * Directoryreader.open (directory); } * * But same as version 4.5 *///The following method is obsolete//Indexreader INDEXR Eader = indexreader.open (directory); Directoryreader = directoryreader.open (directory); 3, according to Indexreader create Indexsearch indexsearcher indexsearcher = new Indexsearcher (Directoryreader); 4. Create search Query/** * Note StandardAnalyzer differs from version 4.5 of 3.5: * * No version number required */Analyzer Analyzer = new StandardAnalyzer (); Create parser to determine what to search for the contents of the file, the first parameter is the domain of the search/** * Note queryparser with 3.5 version4.5 versions are different: * * No version number required */queryparser Queryparser = new Queryparser ("content") , analyzer); Create a query that represents the search domain for content containing Darren document query query = Queryparser.parse ("Darren"); 5. Search according to searcher and return topdocs topdocs topdocs = indexsearcher.search (query, 10); 6, according to Topdocs get Scoredoc object scoredoc[] Scoredocs = Topdocs.scoredocs; for (Scoredoc Scoredoc:scoredocs) {///7, Get specific Document object based on searcher and Scoredoc object document Doc Ument = Indexsearcher.doc (Scoredoc.doc); 8, according to the document object to obtain the desired value SYSTEM.OUT.PRINTLN (document.get ("filename") + "" + document.get ("filepath"); }} catch (Exception e) {e.printstacktrace (); } finally {try {if (Directoryreader! = null) {directoryreader.close (); }} catch (Exception e) { E.printstacktrace (); } } }}
Test code:
Package Com.darren.lucene50;import Org.junit.test;public class Hellolucenetest { @Test public void Testsearch () { HelloLucene hellolucene = new HelloLucene (); Hellolucene.search (); }}
Lucene Tutorial (ii) Search preliminary