Lucene笔记(1)

初识Lucene

这里写图片描述

package com.lucene;

import java.io.File;
import java.io.IOException;

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.Store;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.StringField;
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.index.IndexableField;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
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;
import org.apache.lucene.util.Version;
import org.junit.Test;

/*
 * 使用lucene对数据建立索引
 */
public class TestLucene {

    /*
     * 使用indexWriter对数据建立索引
     */
    @Test
    public void testCreateIndex() throws IOException{
        //索引存放的位置
        Directory diretory = FSDirectory.open(new File("indexDir"));

        //lucene 当前使用的匹配版本
        Version matchVersion = Version.LUCENE_44;

        //分词器
        Analyzer analyzer = new StandardAnalyzer(matchVersion);

        //索引写入的配置
        IndexWriterConfig writerConfig = new IndexWriterConfig(matchVersion, analyzer);

        //创建用于索引的类
        IndexWriter indexWriter = new IndexWriter(diretory, writerConfig);

        //通过indexWriter来创建索引

        //索引库里面的数据要遵守一定的结构(索引结构),docment就是索引结构
        Document doc = new Document();

        //索引docment里面也有很多字段
        /*
         * 1:字段的名称
         * 2:字段对应的值
         * 3:该字段在索引库中是否存储
         */
        IndexableField field = new IntField("id",1,Store.YES);
        IndexableField title = new StringField("title","java-lucene",Store.YES);
        IndexableField content = new TextField("content","java培训的龙头老大,口碑最好的java培训机构",Store.YES);
        doc.add(field);
        doc.add(title);
        doc.add(content);

        indexWriter.addDocument(doc);
        indexWriter.close();
    }

    /*
     * 使用indexSearcher对数据进行索引
     */
    @Test
    public void testSearcher()throws IOException{

        //索引存放的位置
        Directory diretory = FSDirectory.open(new File("indexDir"));

        IndexReader indexReader = DirectoryReader.open(diretory);
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        //我们以后只要根据索引查找,整个过程肯定要分两次
        //这个一个搜索条件
        //term 我需要根据那个字段的哪个值检索
        Query query = new TermQuery(new Term("content","java"));
        TopDocs topDocs = indexSearcher.search(query,100);
        System.out.println("====总记录数===="+topDocs.totalHits);
        ScoreDoc scoreDocs[] = topDocs.scoreDocs;
        for(ScoreDoc scoreDoc: scoreDocs){
            int docId = scoreDoc.doc;
            Document docment =
            indexSearcher.doc(docId);
            System.out.println(docment.get("id"));
            System.out.println(docment.get("content"));
            System.out.println(docment.get("title"));
        }
    }
}

输出结果:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值