Lucene入门(一)

Lucene是一款非常棒的搜索引擎,而Lucene.NET是Lucene的.NET版本,本入门文档将以Lucene.NET 3.03为例。

1、介绍一下创建索引过程的核心类

Directory类描述了Lucene索引存放的位置,它是一个抽象类,它的子类负责具体指定索引的存储路径。例如FSDirectory类是负责真实文件系统的存储。

IndexWriter是写索引的核心类,该类负责创建新索引或者打开已有的索引,以及向索引中添加、更新、删除被索引文档。该类不负责读取和搜索索引。

Analyzer是分词器的抽象类,分词器用来对文本信息进行分析处理,例如:输入的索引信息是Let me see.经过分词器分析后,得到三个单词Let、me、see。当然有很多分词规则,视实际需要而定。待索引文本需要经过分词器分析后,才能提交给IndexWriter类创建索引。

Document代表待索引的文档信息,可以通俗的理解为一条记录或一篇文章,而Field就是组成Document的最小单位。例如,需要保存10条记录的数据,每个记录包含title和content两个信息项,那么一条记录就是一个Document对象,而title和content就是两个Field。

2、介绍一下搜索索引过程的核心类

Searcher是一个用于搜索由 IndexWriter 类创建的索引,它是个抽象类,其中,IndexSearcher是最常用的派生类,该类最简单的实现是接收单个Query和int topN计数作为参数,返回一个TopDocs对象。

Query是查询子类,它是一个抽象类。搜索指定单词或词组涉及到在项中包装它们,将项添加到查询对象,将查询对象传递到Searcher的搜索方法。

Term是搜索功能的基本单元。与Field对象类似,Term对象包含一对字符串的键值对,即域名和单词。

TopDocs是一个简单的指针容器,其包含前Searcher对象返回的搜索结果,搜索结果包含在其ScoreDoc数组属性中,还包含这些文档的DocId和浮点型分数。

3、下面给出添加索引和搜索的简单示例

添加索引

// 索引文件所在目录
private string INDEX_STORE_PATH = "D:\\SearchIndex";

private void CreateIndex()
{
    // 创建Directory对象,指向索引文件保存的目录
    using (Directory indexDirectory = FSDirectory.Open(new System.IO.DirectoryInfo(INDEX_STORE_PATH)))
    {
        // 定义使用标准分词器
        using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
        {
            // 检查目录是否已经存在
            bool iscreate = !Lucene.Net.Index.IndexReader.IndexExists(indexDirectory);

            // 使用之前创建的分析器、目录来创建索引写对象
            using (IndexWriter writer = new IndexWriter(indexDirectory, analyzer, iscreate, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // 向索引中添加文档
                AddDocument(writer, "Visual Studio", "Visual Studio 2013");
                AddDocument(writer, "Microsoft Co.", "Microsoft will publish Visual Studio 2013");

                // 优化索引
                writer.Optimize();
            }
        }
    }
}

static void AddDocument(IndexWriter writer, string title, string content)
{
    // 创建文档对象
    Document document = new Document();

    // 给文档添加Field对象
    document.Add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED));
    document.Add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED));

    // 将文档添加到writer对象中,由其后代码创建索引
    writer.AddDocument(document);
}

搜索索引

public void Search()
{
    // 创建Directory对象,指向索引文件保存的目录
    using (Directory indexDirectory = FSDirectory.Open(new System.IO.DirectoryInfo(INDEX_STORE_PATH)))
    {
        // 创建标准分词器
        using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
        {
            // 创建索引搜索对象
            using (IndexSearcher searcher = new IndexSearcher(indexDirectory, true))
            {
                // 查找title中包含visual单词的文档
                Term t = new Term("title", "visual");
                Query query = new TermQuery(t);
                TopDocs docs = searcher.Search(query, 10);
                Console.WriteLine(docs.TotalHits);

                // 查找content中包含studio单词的文档
                t = new Term("content", "studio");
                docs = searcher.Search(new TermQuery(t), 10);
                Console.WriteLine(docs.TotalHits);

            }
        }
    }
}

参考:《Lucene in Action》

时间: 2024-08-25 14:18:03

Lucene入门(一)的相关文章

1.2 lucene入门程序环境搭建及入门代码

 lucene入门程序环境搭建及入门代码 1.1      需求 使用lucene完成对数据库中图书信息的索引和搜索功能. 1.2      环境准备 l  Jdk:1.7及以上 l  Lucene:4.10(从4.8版本以后,必须使用jdk1.7及以上) l  Ide:indigo l  数据库:mysql 5 1.3      工程搭建 l  Mysql驱动包 l  Analysis的包 l  Core包 l  QueryParser包 l  Junit包(非必须) 创建po类 1 publ

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

Lucene入门精讲视频教程

课程目录:1.Lucene-全文检索是什么?2.Lucene-流程之原生文档3.Lucene-流程之创建文档对象4.Lucene-流程之分析文档5.Lucene-流程之创建索引6.Lucene-入门创建索引7.Lucene-全文检索搜索8.Lucene-入门查询索引9.Lucene-中文第3方插件分析器(IK分析器)10.Lucene-索引库删除11.Lucene-索引库修改12.Lucene-索引库查询(Query子类查询)13.Lucene-索引库查询(解析语法查询)14.Lucene-索引

Lucene入门——基础知识

Lucene简介 Lucene是一个基于Java的全文信息检索工具包,为应用程序提供索引和搜索功能. Lucene采用的是一种称为反向索引(inverted index)的机制.反向索引就是说我们维护一个词/短语表,对于这个词/短语表再通过一个链表标示哪些文档包含了这个词.短语.这样在用户输入查询条件的时候,就能非常快的查找到搜索结果.对文档建好索引后,可以基于索引进行搜索.搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上查找,最终返回和用户输入的关键词相关联的文档. Lucene软

Lucene入门案例一

1. 配置开发环境 官方网站:http://lucene.apache.org/ Jdk要求:1.7以上 创建索引库必须的jar包(lucene-core-4.10.3.jar,lucene-analyzers-common-4.10.3.jar) 其他jar包(commons-io-2.4.jar , junit-4.9.jar) 2. 创建索引库 第一步:创建一个java工程,并导入jar包. 第二步:创建一个indexwriter对象. 1)指定索引库的存放位置Directory对象 2)

Lucene 入门需要了解的东西

全文搜索引擎的原理网上大段的内容,要想深入的学习,最好的办法就是先用一下,lucene 发展比较快,下面是写第一个demo  要注意的一些事情: 1.Lucene的核心jar包,下面几个包分别位于不同的文件夹,需要手工找到并引用就可以进行开发了 lucene-core-5.3.1.jar lucene-analyzers-common-5.3.1.jar lucene-queryparser-5.3.1.jar 2.主要开发包说明 org.apache.lucene.analysis:语言分析器

Lucene入门的基本知识(四)

刚才在写创建索引和搜索类的时候发现非常多类的概念还不是非常清楚,这里我总结了一下. 1 lucene简单介绍 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它仅仅是提供了一种工具让你能实现这些产品. 1.2 lucene能做什么 要回答这个问题,先要了解lucene的本质.实际上lucene的功能非常单一.说究竟,就是你给它若干个字符串.然后它为你提供一个全文搜索服务,告诉你你要

lucene入门查询索引——(三)

1.用户接口(lucene不提供) 2.创建查询 3.执行查询 4.渲染结果: 5.过程分析 根据关键字查询索引库中的内容: 1)  创建IndexSearcher对象 2)  创建QueryParser对象 3)  创建Query对象来封装关键字 4)  用IndexSearcher对象去索引库中查询符合条件的前100条记录,不足100条记录的以实际为准 5)  获取符合条件的编号 6)  用indexSearcher对象去索引库中查询编号对应的Document对象 7)  将Document

Lucene入门学习

参考博客: http://blog.csdn.net/ayi_5788/article/category/6348409 分页: http://blog.csdn.net/hu948162999/article/details/41209699 1. 什么是中文分词 学过英文的都知道,英文是以单词为单位的,单词与单词之间以空格或者逗号句号隔开.而中文则以字为单位,字又组成词,字和词再组成句子.所以对于英文,我们可以简单以空格判断某个字符串是否为一个单词,比如I love China,love 和