lucene

一、
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();

}
}

}
二、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>
posted @ 2019-03-18 16:04  albert_think  阅读(252)  评论(0编辑  收藏  举报