一、到依赖:
<!--导入lucence核心依赖-->
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.10.2</version>
</dependency>
<!--分词依赖-->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>4.10.2</version>
</dependency>
<!--lucence搜索核心依赖-->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>4.10.2</version>
</dependency>
<!--IK分词器-->
<dependency>
<groupId>com.jianggujin</groupId>
<artifactId>IKAnalyzer-lucene</artifactId>
<version>4.1.0</version>
</dependency>
<dependencies>
二、写入数据:
package com.chinasofti.lucene.demo;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.File;
public class WriteDocument {
public static void main(String[] args) throws Exception {
Document document = new Document();
document.add(new LongField("id",1473155181, Field.Store.YES));
document.add(new TextField("title","中软国际飞利浦 (X1560) 黑色+香槟色 移动联通2G手机 双卡双待", Field.Store.YES));
document.add(new StringField("sellpoint","畅销!智能机的好伴侣,可以充电的手机!最长可达100天!键盘金属工艺,移动电源功能!", Field.Store.YES));
document.add(new LongField("price",369000, Field.Store.YES));
document.add(new IntField("num",99999, Field.Store.YES));
document.add(new StringField("image","http://image.chinasofti.com/group1/691c77d0ed13417da7cf59b8bd1e3bab.jpg", Field.Store.YES));
document.add(new LongField("cid",560, Field.Store.YES));
Directory directory = FSDirectory.open(new File("./sqlData"));
Analyzer analyzer = new IKAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_2,analyzer);
IndexWriter writer = new IndexWriter(directory,config);
writer.addDocument(document);
writer.commit();
writer.close();
System.out.println("创建成功!");
}
}
三、查询数据:
package com.chinasofti.lucene.demo;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.io.File;
import java.io.IOException;
public class SearchDocument {
public static void main(String[] args) throws IOException {
Directory dir = FSDirectory.open(new File("./testProductsData"));
IndexReader indexReader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(indexReader);
Query query = new TermQuery(new Term("title","飞"));
TopDocs result = searcher.search(query, 50000);
System.out.println("查询总数:"+result.totalHits);
ScoreDoc[] scoreDocs = result.scoreDocs;
for(ScoreDoc sd : scoreDocs){
System.out.println("权重:"+sd.score);
Document document = searcher.doc(sd.doc);
System.out.println(document.getField("id"));
System.out.println(document.getField("title"));
System.out.println(document.getField("sellpoint"));
System.out.println(document.getField("price"));
System.out.println(document.getField("num"));
System.out.println(document.getField("image"));
System.out.println(document.getField("cid"));
}
indexReader.close();
}
}
附件:springboot+httpClient+lucene
添加几个依赖
<!--httpclient依赖-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!--导入json转换工具包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.2</version>
</dependency>
写入数据:
package com.chinasofti.lucene.demo;
import com.chinasofti.entity.Product;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class ImportDBToIndex {
private static final ObjectMapper MAPPER = new ObjectMapper();
public static void main(String[] args) {
String url = "http://open.chinasofti.com/api/restful/product";
try {
String result = doGet(url);
if(result != null){
JavaType type = MAPPER.getTypeFactory().constructParametricType(List.class, Product.class);
List<Product> productList = MAPPER.readValue(result, type);
Directory directory = FSDirectory.open(new File("./testProductsData"));
Analyzer analyzer = new IKAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_2,analyzer);
IndexWriter writer = new IndexWriter(directory,config);
for(Product p : productList){
Document document = new Document();
document.add(new LongField("id",p.getId(), Field.Store.YES));
document.add(new TextField("title",p.getTitle(), Field.Store.YES));
document.add(new StringField("sellpoint",p.getSellpoint(), Field.Store.YES));
document.add(new LongField("price",p.getPrice(), Field.Store.YES));
document.add(new IntField("num",p.getNum(), Field.Store.YES));
document.add(new StringField("image",p.getImage(), Field.Store.YES));
document.add(new LongField("cid",p.getCid(), Field.Store.YES));
writer.addDocument(document);
writer.commit();
}
System.out.println("写入成功");
writer.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String doGet(String url) throws Exception{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpGet);
if(response.getStatusLine().getStatusCode() == 200){
String content = EntityUtils.toString(response.getEntity(), "UTF-8");
return content;
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(response !=null){
response.close();
}
httpClient.close();
}
return null;
}
}
查询数据:
package com.chinasofti.lucene.demo;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.io.File;
import java.io.IOException;
public class SearchDocument {
public static void main(String[] args) throws IOException {
Directory dir = FSDirectory.open(new File("./testProductsData"));
IndexReader indexReader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(indexReader);
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term("title","老人")),BooleanClause.Occur.MUST);
query.add(new TermQuery(new Term("title","apple")),BooleanClause.Occur.MUST_NOT);
TopDocs result = searcher.search(query, 50000);
System.out.println("查询总数:"+result.totalHits);
ScoreDoc[] scoreDocs = result.scoreDocs;
for(ScoreDoc sd : scoreDocs){
System.out.println("权重:"+sd.score);
Document document = searcher.doc(sd.doc);
System.out.println(document.getField("id"));
System.out.println(document.getField("title"));
System.out.println(document.getField("sellpoint"));
System.out.println(document.getField("price"));
System.out.println(document.getField("num"));
System.out.println(document.getField("image"));
System.out.println(document.getField("cid"));
}
indexReader.close();
}
}