lucene索引文件的创建和简单的使用

MAVEN地址

<dependency>
    <groupId>org.apache.lucene</groupId>
	<artifactId>lucene-core</artifactId>
	<version>9.1.0</version>
</dependency>

生成Lucene索引文件

public void createLuceneIndex() throws IOException {

    	//设置lucene索引存储的文档位置
    	String newLuceneIndexPath = "../indexFolderPath";
		// 1.创建Directory对象,设置索引文件地址
		Directory directory = FSDirectory.open(new File(newLuceneIndexPath).toPath());
	    // 2.生成Directory对象的IndexWriter索引编辑器对象
	    IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig());
	    // 3.设置存储数据的类型

	    //作为索引KEY类型
	    FieldType indexKeyFieldType = new FieldType();
	    indexKeyFieldType.setIndexOptions(IndexOptions.DOCS);//设置索引选项
	    indexKeyFieldType.setStored(true);//是否储存
	    indexKeyFieldType.setTokenized(false);//是否分词

	    //作为索引VALUE类型
	    FieldType indexValFieldType= new FieldType();
	    indexValFieldType.setStored(true);//是否储存
	    indexValFieldType.setTokenized(false);//是否分词

    	Field field1 = new Field("INDEX_KEY", "key", indexKeyFieldType);//KEY
    	StoredField field2 = new StoredField("SORT_KEY", "1", indexKeyFieldType);//排序KEY
    	SortedDocValuesField sortField = new SortedDocValuesField("SORT_KEY", new BytesRef("1"));//排序文档值设置
        Field field3 = new Field("IN_KEY", "inkey", indexValFieldType);//IN QUERY KEY
        Field field4 = new Field("INDEX_VALUE", "value", indexValFieldType);//值设置
        Document fileDocument = new Document();
        // 4.设置索引添加到文档中
        fileDocument.add(field1);
        fileDocument.add(field2);
        fileDocument.add(sortField);
        fileDocument.add(field3);
        fileDocument.add(field4);
        // 5.将文档加入到索引库中
        indexWriter.addDocument(fileDocument);

	    // 6.关闭打开的资源
	    indexWriter.close();
	    directory.close();

}

查询索引文件

public void selectIndex()throws IOException {

        //1.Directory对象做成
        Directory directory = FSDirectory.open(new File("../indexFolderPath").toPath());
        //2.生成Directory对象的IndexWriter索引编辑对象
        IndexReader indexReader = DirectoryReader.open(directory);
        //3.生成IndexSearcher对象的indexReader索引读取对象
        IndexSearcher indexSearcher=new IndexSearcher(indexReader);
        //4.查询对象query做成,指定查询的属性和对应的值
        Query query =new TermQuery(new Term("INDEX_KEY", "key"));
        //in search
        BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
        booleanQueryBuilder.add(query, Occur.MUST);//必须
      
        // in条件
        BooleanQuery.Builder booleanShouldQueryBuilder = new BooleanQuery.Builder();
        Query inQuery1 =new TermQuery(new Term("IN_KEY", "inkey1"));
        booleanShouldQueryBuilder.add(inQuery1, Occur.SHOULD);//or
        Query inQuery2 =new TermQuery(new Term("IN_KEY", "inkey2"));
        booleanShouldQueryBuilder.add(inQuery2, Occur.SHOULD);//or
        
        booleanQueryBuilder.add(booleanShouldQueryBuilder.build(), Occur.MUST);

        //5.获取查询对象
        TotalHitCountCollector counter = new TotalHitCountCollector();
        indexSearcher.search(booleanQueryBuilder.build(),counter);
        if (counter.getTotalHits() !=0) {
	        TopDocs topDocs =  indexSearcher.search(booleanQueryBuilder.build(), counter.getTotalHits());
	        //6.循环查询
	        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
	        for(ScoreDoc s:scoreDocs) {
	                int id = s.doc;
	                Document document = indexSearcher.doc(id);
	                String key = document.get("INDEX_KEY");
	                System.out.println(key);
	        }
        }
        //7.关闭资源
        indexReader.close();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theSmallTears

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值