1、
package com.lucene.demo;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
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.index.Term;
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.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Paths;
public class Test01 {
public static void main(String[] args) {
addDoc();
//upDoc();
//delDoc();
search();
}
public static void addDoc(){
try {
Analyzer analyzer = new SmartChineseAnalyzer();
Directory directory = FSDirectory.open( Paths.get("F:/tools/lucene_db/users"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Document doc = new Document();
doc.add(new TextField("id", "001", Field.Store.YES));
doc.add(new TextField("name","中華史", Field.Store.YES));
doc.add(new TextField("content","易中天的中華史", Field.Store.YES));
iwriter.addDocument(doc);
iwriter.close();
System.out.println("*****************--新增--end**************************");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void search(){
try {
Directory directory = FSDirectory.open( Paths.get("F:/tools/lucene_db/users"));
Analyzer analyzer = new SmartChineseAnalyzer();
DirectoryReader ireader = DirectoryReader.open(directory);
IndexSearcher isearcher = new IndexSearcher(ireader);
// Parse a simple query that searches for "text":
QueryParser parser = new QueryParser("name", analyzer);
Query query = parser.parse("中華");
ScoreDoc[] hits = isearcher.search(query, 10).scoreDocs;
// Iterate through the results
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<span style='color:red'>", "</span>");
Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
for (int i = 0; i < hits.length; i++) {
Document hitDoc = isearcher.doc(hits[i].doc);
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(hitDoc.get("name")));
String content = highlighter.getBestFragment(tokenStream, hitDoc.get("name"));
System.out.println("id="+hitDoc.get("id")+"|name="+hitDoc.get("name")+"|content="+content);
}
ireader.close();
directory.close();
System.out.println("*****************--查詢--end**************************");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void upDoc(){
try {
Analyzer analyzer = new SmartChineseAnalyzer();
Directory directory = FSDirectory.open( Paths.get("F:/tools/lucene_db/users"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Document doc = new Document();
doc.add(new TextField("id", "001", Field.Store.YES));
doc.add(new TextField("name","中華史-近代史", Field.Store.YES));
doc.add(new TextField("content","易中天的中華史-近代史", Field.Store.YES));
Term term=new Term("id","001");
iwriter.updateDocument(term,doc);
iwriter.close();
System.out.println("*****************--修改--end**************************");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void delDoc(){
try {
Analyzer analyzer = new SmartChineseAnalyzer();
Directory directory = FSDirectory.open( Paths.get("F:/tools/lucene_db/users"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Document doc = new Document();
doc.add(new TextField("id", "001", Field.Store.YES));
doc.add(new TextField("name","中華史-近代史", Field.Store.YES));
doc.add(new TextField("content","易中天的中華史-近代史", Field.Store.YES));
Term term=new Term("id","001");
iwriter.deleteDocuments(term);
iwriter.close();
System.out.println("*****************--刪除---end**************************");
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、pom.xml
<?xml version="1.0" encoding="UTF-8"?><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</groupId> <artifactId>lucene-01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>lucene-01 Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>8.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-queryparser --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>8.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-highlighter --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-highlighter</artifactId> <version>8.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers-common --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>8.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers</artifactId> <version>3.6.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-queries --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queries</artifactId> <version>8.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-memory --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-memory</artifactId> <version>8.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers-smartcn --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-smartcn</artifactId> <version>8.0.0</version> </dependency> </dependencies> <build> <finalName>lucene-01</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build></project>