使用Lucene的java api 写入和读取索引库

import org.apache.commons.io.FileUtils;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.NumericDocValuesField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.queryparser.classic.ParseException;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.junit.Test;

import java.io.File;import java.io.IOException;import java.nio.file.Path;import java.nio.file.Paths;

public class Day01 {    public String dataDir="E:\\data";    //2.search检索    @Test    public void search() throws IOException, ParseException {      //01.        Path path=Paths.get("./luceneindex/");        Directory directory=FSDirectory.open(path);        IndexReader indexReader=DirectoryReader.open(directory);        //索引查询工具        IndexSearcher indexSearcher=new IndexSearcher(indexReader);        String word="战斗";        QueryParser queryParser=new QueryParser("filename",new StandardAnalyzer());        Query query=queryParser.parse(word);        TopDocs topDocs = indexSearcher.search(query, 10);

long count = topDocs.totalHits;        System.out.println("总记录数:"+count);

ScoreDoc[] scoreDocs = topDocs.scoreDocs;        for (ScoreDoc item:scoreDocs) {            int docid = item.doc; //文档编号            Document document = indexReader.document(docid);            String filename = document.get("filename");            System.out.println(filename);        }    }    @Test    //1.创建索引    public void createIndex() throws IOException {      //01.准备一个写入索引的目录       Path path = Paths.get("./luceneindex/");       //02.将路径与Directory进行绑定        Directory directory=FSDirectory.open(path);        //03.这行code在底层默认已经关联绑定了一个StandardAnalyzer 标准分词器        IndexWriterConfig config=new IndexWriterConfig();        //04.给config设置一个模式  Create:每次都抹掉原来的索引文件,重新构建新的索引文件        config.setOpenMode(IndexWriterConfig.OpenMode.CREATE);        //05.索引写入器需要两个入参,一个是目录,另一个是配置        IndexWriter writer=new IndexWriter(directory,config);        //06.准备加入索引库的内容        File file = new File(dataDir);        //07.某个目录下的文件集合        File[] files = file.listFiles();        for (File item:files) {            //08.将内容幻化成----->Document            Document document=new Document();            String filename=item.getName(); //file--->String            System.out.println(filename);            System.out.println("===============================");            String filecontent=FileUtils.readFileToString(item);            Long modifydate=item.lastModified();            //09.真正的给Document的field赋值            document.add(new TextField("filename",filename,Field.Store.YES));            document.add(new TextField("filecontent",filecontent,Field.Store.YES));            document.add(new NumericDocValuesField("modifydate",modifydate));            //10.将单个Document(一条记录)  保存到  索引库中            writer.addDocument(document);        }        //11.关闭索引库        writer.close();        System.out.println("add indexes ok!");    }}

原文地址:https://www.cnblogs.com/bdqnjs/p/9425455.html

时间: 2024-10-14 05:31:20

使用Lucene的java api 写入和读取索引库的相关文章

【Lucene】详解Lucene全文检索的信息写入与读取

Lucene的大致结构图: 信息写入索引库的过程: 读取信息的过程: 下面是一个向索引库写入信息与读取信息的例子: public void testCreateIndex() throws Exception{ /** * 1.创建一个student对象,并且把信息存放进去 * 2.调用indexWriter的API把数据存放在索引库中 * 3.关闭indexWriter */ // 创建一个Student对象,并且把信息存放进去 Student student = new Student();

spark2.x由浅入深深到底系列六之RDD java api用JdbcRDD读取关系型数据库

学习任何的spark技术之前,请先正确理解spark,可以参考:正确理解spark 以下是用spark RDD java api实现从关系型数据库中读取数据,这里使用的是derby本地数据库,当然可以是mysql或者oracle等关系型数据库: package com.twq.javaapi.java7; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; imp

Elasticsearch5.0 Java Api(六) -- 批量导入索引

将计算机本地的.json格式文件中的数据,批量导入到索引库中 1 package com.juyun.test; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileNotFoundException; 6 import java.io.FileReader; 7 import java.io.IOException; 8 import java.net.InetAddress; 9 imp

Elasticsearch5.0 Java Api(五) -- 批量导出索引

从索引库中将检索到的数据导出到外部文件,文件格式为.json 1 package com.juyun.test; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileWriter; 6 import java.io.IOException; 7 import java.net.InetAddress; 8 import java.net.UnknownHostException; 9 10

HDFS Java API使用之读取上传文件

package com.ibeifeng.hadoop.senior.hdfs; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOu

ElasticSearch Java Api -创建索引

ElasticSearch JAVA API官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html 一.生成JSON 创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法: 1.1手写方式生成 String json = "{" + "\"user\":\"kimchy\"

Lucene系列:(5)LuceneUtils之索引库优化

1.什么是索引库 索引库是Lucene的重要的存储结构,它包括二部份:原始记录表,词汇表 原始记录表:存放的是原始记录信息,Lucene为存入的内容分配一个唯一的编号 词汇表:存放的是经过分词器拆分出来的词汇和该词汇在原始记录表中的编号 2.为什么要将索引库进行优化 在默认情况下,向索引库中增加一个Document对象时,索引库自动会添加一个扩展名叫*.cfs的二进制压缩文件,如果向索引库中存Document对象过多,那么*.cfs也会不断增加,同时索引库的容量也会不断增加,影响索引库的大小.

Lucene入门程序-Java API的简单使用

Lucene入门程序 准备环境 JDK: 1.8.0_162 IDE: Eclipse Neon.3 数据库: MySQL 5.7.20 Lucene: 4.10.4(已经很稳定了,高版本对部分分词器支持不好) 准备数据 SET FOREIGN_KEY_CHECKS=0; -------------------------------- Table structure for `book` -------------------------------- DROP TABLE IF EXISTS

Java API 读取HDFS目录下的所有文件

/** * 获取1号店生鲜食品的分类id字符串 * @param filePath * @return */ public String getYHDSXCategoryIdStr(String filePath) { final String DELIMITER = new String(new byte[]{1}); final String INNER_DELIMITER = ","; // 遍历目录下的所有文件 BufferedReader br = null; try { F