LUCENE搜索【鸡蛋】

我们已经为一个目录下的文本文档建立好了索引,现在我们就要在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene 提供了几个基础的类来完成这个过程,它们分别是呢 IndexSearcher, Term, Query, TermQuery, Hits. 下面我们分别介绍这几个类的功能。

Query

这是一个抽象类,他有多个实现,比如 TermQuery, BooleanQuery, PrefixQuery. 这个类的目的是把用户输入的查询字符串封装成 Lucene 能够识别的 Query。

Term

Term 是搜索的基本单位,一个 Term 对象有两个 String 类型的域组成。生成一个 Term 对象可以有如下一条语句来完成:Term term = new Term(“fieldName”,”queryWord”); 其中第一个参数代表了要在文档的哪一个 Field 上进行查找,第二个参数代表了要查询的关键词。

TermQuery

TermQuery 是抽象类 Query 的一个子类,它同时也是 Lucene 支持的最为基本的一个查询类。生成一个 TermQuery 对象由如下语句完成: TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的构造函数只接受一个参数,那就是一个 Term 对象。

IndexSearcher

IndexSearcher 是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher 的实例在一个索引上进行操作。

Hits

Hits 是用来保存搜索的结果的。

 


            //索引文件路径,我们可以从表中获取它,在这里我们直接给出
            string INDEX_FILE_PATH = string.Empty;
            INDEX_FILE_PATH = @"C:\wwwroot\Test\20120510_634722698826410118";
            //IndexSearcher核心搜索类,以只读方式打开索引
            IndexSearcher searcherindex = new IndexSearcher(INDEX_FILE_PATH);
            Analyzer analyzer = new StopAnalyzer();//创建一个分析器
            QueryParser query = new QueryParser("indexcontent", analyzer);
            Query q = query.Parse(strkey);
            //搜索类的搜索方法,接收单个query对象作为参数,并返回一个hits对象(该对象是一个存放指针的简单容器)
            Hits searchhit = searcherindex.Search(q);
            DataTable newdt = new DataTable();
            if(searchhit.Length()>0)
            {
                //创建列
                newdt.Columns.Add("NewsID");
                newdt.Columns.Add("NewsTitle");
                newdt.Columns.Add("NewsSummary");
                DataRow dr = null;//创建一个行对象,但不实例化
                for (int i = 0; i < searchhit.Length(); i++)
                {
                    //加载创建时所添加到document对象里的某条记录
                    Document doc = searchhit.Doc(i);
                    dr = newdt.NewRow();//不断实例化这个对象
                    //将整条记录所有字段全部读取出来
                    dr["NewsID"] = doc.Get("pkid").ToString();
                    dr["NewsTitle"] = doc.Get("title").ToString();
                    dr["NewsSummary"] = doc.Get("summary").ToString();
                    newdt.Rows.Add(dr);//将当前对象添加到表里
                    dr.AcceptChanges();
                }
            }
            return newdt;

类 IndexSearcher 的构造函数接受一个类型为 Directory 的对象,Directory 是一个抽象类,它目前有两个子类:FSDirctory 和 RAMDirectory. 我们的程序中传入了一个 FSDirctory 对象作为其参数,代表了一个存储在磁盘上的索引的位置。构造函数执行完成后,代表了这个 IndexSearcher 以只读的方式打开了一个索引。然后我们程序构造了一个 Term 对象,通过这个 Term 对象,我们指定了要在文档的内容中搜索包含关键词”lucene”的文档。接着利用这个 Term 对象构造出 TermQuery 对象并把这个 TermQuery 对象传入到 IndexSearcher 的 search 方法中进行查询,返回的结果保存在 Hits 对象中。最后我们用了一个循环语句把搜索到的数据都存放到一个表里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值