关于Lucene的理解和使用

什么时lucene?

Lucene是简单而功能强大的基于Java的搜索库。它可以用于任何应用程序来搜索功能。 Lucene是开源项目。它是可扩展的,高性能的库用于索引和搜索几乎任何类型的文本。Lucene库提供了所需的任何搜索应用程序的核心业务。索引和搜索。简单来说就是将需要搜索的类容通过lucene创建索引库,搜索的时候去索引库里面查找。

什么叫做全文检索?

我们生活中的数据总体分为两种:一种为结构化数据,指具有固定格式或者限长的数据,比如数据库等,这种的检索很简单可以根据条件来查找,第二种为非结构化数据,指没有固定格式的数据,比如文档,word等对非结构化的数据进行检索就是全文检索。

全文检索又分两种方法:第一顺序扫描法,就是挨个找,找到需要的数据,直到全部找完。第二种就是全文检索,将没有规则的数据中的部分信息提取出来,重新组织,成为有结构的数据,然后再进行查询,提取出来的数据就称之为索引。
例子:字典,字典的拼音表和部首检字表就相当于字典的索引。

使用Lucene进行全文检索的操作

全文检索分为两个部分:

1:创建索引
2:搜索索引

如何创建索引:

1:获取需要创建索引的文档
2:将文档传给分词器
3:分词器进行分词处理
4:利用得到的词创建字典,进行排序,合并相同的词,形成倒排链表

如何对索引进行搜索

1:输入查询语句
2:对查询语句进行词法分析(获取查询语句中需要的类容)
3:分词处理
4:搜索索引,在索引表中找到关键词的文档链表,将相同的合并,形成新的文档链表
5:根据文档和查询语句的相关性对结果进行排序(计算权重和判断相关性)
6:返回结果集

Lucene简单入门

pom.xml 添加依赖

<dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-codecs</artifactId>
            <version>4.6.1</version>
        </dependency>

创建索引

 // 索引存放目录
    public static final String INDEX_DIR = "E:\\index_dir1";

    public void createIndex() throws IOException {
        //索引写入位置
        Directory index = FSDirectory.open(new File(INDEX_DIR));
        //分词器
        Analyzer analyzer = new StandardAnalyzer();  //可以配置不同的分析器
        IndexWriterConfig config = new IndexWriterConfig(Version.LATEST,analyzer);
        //索引写入器
        IndexWriter indexWriter = new IndexWriter(index,config);
        //文档写入
        Document doc = new Document();
        doc.add(new StringField("title","Lucene in Action",Field.Store.YES));
        doc.add(new StringField("content","学习lucene的使用",Field.Store.YES));
        indexWriter.addDocument(doc);
        //关闭索引写入
        indexWriter.close();
    }

    public void search() throws Exception {
        String keyWord = "Lucene";
        //查询器
        Query query = new QueryParser("title",new StandardAnalyzer()).parse(keyWord);
        //打开索引文件
        Directory writer = FSDirectory.open(new File(INDEX_DIR));
        IndexReader reader = DirectoryReader.open(writer);
        IndexSearcher searcher = new IndexSearcher(reader);
        TopDocs topDocs = searcher.search(query,100);
        System.out.println("查询总数:"+topDocs.totalHits);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值