博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene的API使用
阅读量:5893 次
发布时间:2019-06-19

本文共 8608 字,大约阅读时间需要 28 分钟。

  hot3.png

  • 1)创建索引(使用6.0.0的方式创建)

pom.xml

junit
junit
3.8.1
test
org.apache.lucene
lucene-core
6.0.0
org.apache.lucene
lucene-queryparser
6.0.0
org.apache.lucene
lucene-analyzers-common
6.0.0
commons-io
commons-io
2.5

 

 

IndexRepository.java

import java.io.File;import java.io.IOException;import java.nio.file.Path;import org.apache.commons.io.FileUtils;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.Field.Store;import org.apache.lucene.document.StoredField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;/** * 索引存储 */public class IndexRepository {    // 注意:此处使用的是Lucene6.0.0最新版本与4.X版本有一些区别,可以查看源码或者API进行了解    public static void main(String[] args) throws IOException {        // 指定索引库的存放路径,需要在系统中首先进行索引库的创建        // 指定索引库存放路径        File indexrepository_file = new File("此处是索引存放地址");        Path path = indexrepository_file.toPath();        Directory directory = FSDirectory.open(path);        // 读取原始文档内容        File files = new File("此处是源文件地址");        // 创建一个分析器对象        // 使用标准分析器        Analyzer analyzer = new StandardAnalyzer();        // 创建一个IndexwriterConfig对象        // 分析器        IndexWriterConfig config = new IndexWriterConfig(analyzer);        // 创建一个IndexWriter对象,对于索引库进行写操作        IndexWriter indexWriter = new IndexWriter(directory, config);        // 遍历一个文件        for (File f : files.listFiles()) {            // 文件名            String fileName = f.getName();            // 文件内容            @SuppressWarnings("deprecation")            String fileContent = FileUtils.readFileToString(f);            // 文件路径            String filePath = f.getPath();            // 文件大小            long fileSize = FileUtils.sizeOf(f);            // 创建一个Document对象            Document document = new Document();            // 向Document对象中添加域信息            // 参数:1、域的名称;2、域的值;3、是否存储;            Field nameField = new TextField("name", fileName, Store.YES);            Field contentField = new TextField("content", fileContent , Store.YES);            // storedFiled默认存储            Field pathField = new StoredField("path", filePath);            Field sizeField = new StoredField("size", fileSize);            // 将域添加到document对象中            document.add(nameField);            document.add(contentField);            document.add(pathField);            document.add(sizeField);            // 将信息写入到索引库中            indexWriter.addDocument(document);        }        // 关闭indexWriter        indexWriter.close();    }}

运行结果: 

运行结果-01

  • 2)创建索引(使用4.10.3的方式创建)

pom.xml

junit
junit
3.8.1
test
commons-io
commons-io
2.5
org.apache.lucene
lucene-analyzers-common
4.10.3
org.apache.lucene
lucene-queryparser
4.10.3
org.apache.lucene
lucene-core
4.10.3

IndexRepository.java

import java.io.File;import java.io.IOException;import org.apache.commons.io.FileUtils;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.LongField;import org.apache.lucene.document.StoredField;import org.apache.lucene.document.TextField;import org.apache.lucene.document.Field.Store;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;/** * 索引的创建 */public class IndexRepository {    public static void main(String[] args) throws IOException {        Directory directory = FSDirectory.open(new File("此处是索引文件存放地址"));        File files = new File("此处是源文件地址");        Analyzer analyzer = new StandardAnalyzer();        IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);        IndexWriter indexWriter = new IndexWriter(directory,config);        for (File f : files.listFiles()) {            // 文件名            String fileName = f.getName();            // 文件内容            @SuppressWarnings("deprecation")            String fileContent = FileUtils.readFileToString(f);            // 文件路径            String filePath = f.getPath();            // 文件大小            long fileSize = FileUtils.sizeOf(f);            // 创建一个Document对象            Document document = new Document();            // 向Document对象中添加域信息            // 参数:1、域的名称;2、域的值;3、是否存储;            Field nameField = new TextField("name", fileName, Store.YES);            Field contentField = new TextField("content", fileContent , Store.YES);            // storedFiled默认存储            Field pathField = new StoredField("path", filePath);            Field sizeField = new LongField("size", fileSize, Store.YES);            // 将域添加到document对象中            document.add(nameField);            document.add(contentField);            document.add(pathField);            document.add(sizeField);            // 将信息写入到索引库中            indexWriter.addDocument(document);        }        indexWriter.close();    }}

3)查询索引库

import java.io.File;import java.io.IOException;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.IndexSearcher;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TermQuery;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;/** * 文档搜索 * 通过关键词搜索文档 * */public class DocSearch {    public static void main(String[] args) throws IOException {        // 打开索引库        // 找到索引库的位置        Directory directory = FSDirectory.open(new File("此处是索引文件存放地址"));        IndexReader indexReader = DirectoryReader.open(directory);        // 创建一个IndexSearcher对象        IndexSearcher indexSearcher = new IndexSearcher(indexReader);        // 创建一个查询对象        TermQuery query = new TermQuery(new Term("name","apache"));        // 执行查询        // 返回的最大值,在分页的时候使用        TopDocs topDocs = indexSearcher.search(query, 5);        // 取查询结果总数量        System.out.println("总共的查询结果:" + topDocs.totalHits);        // 查询结果,就是documentID列表        ScoreDoc[] scoreDocs = topDocs.scoreDocs;        for (ScoreDoc scoreDoc : scoreDocs) {            // 取对象document的对象id            int docID = scoreDoc.doc;            // 相关度得分            float score = scoreDoc.score;            // 根据ID去document对象            Document document = indexSearcher.doc(docID);            System.out.println("相关度得分:" + score);            System.out.println("");            System.out.println(document.get("name"));            System.out.println("");            // 另外的一种使用方法            System.out.println(document.getField("content").stringValue());            System.out.println(document.get("path"));            System.out.println();            System.out.println("=======================");        }        indexReader.close();    }}

运行结果: 

运行结果

本文截取自:https://blog.csdn.net/yangqian201175/article/details/51462413

转载于:https://my.oschina.net/HJCui/blog/1820258

你可能感兴趣的文章
android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法
查看>>
android 窗
查看>>
使用TRACE时 输出 _CrtDbgReport: String too long or IO Error
查看>>
dva框架使用详解及Demo教程
查看>>
HandyJSON实现方案浅析
查看>>
iOS APP检查版本更新
查看>>
Vue.js+Element-UI从0到部署:基础篇(1.搭建前准备)
查看>>
玩转ECMAScript 6 ~
查看>>
Android NDK开发之旅7 C语言 联合体与枚举
查看>>
Java面试笔试【第六部分】
查看>>
JVM系列之Java内存结构详解
查看>>
从crash看kotlin-android-extensions工作原理
查看>>
HttpURLConnection和HttpClient的使用
查看>>
五种排序算法的比较
查看>>
iOS 简单而粗暴的说一说内存管理
查看>>
EditText 的一些特殊用法---限制只能输入字母和数字,并且字母自动大写
查看>>
React Native仓库本地CocoaPods支持
查看>>
React Native 在 Airbnb(译文)
查看>>
Vue新手向:14篇教程带你从零撸一个Todo应用
查看>>
URL加载系统之四:认证与TLS链验证
查看>>