Lucene入门之执行搜索

执行搜索

搜索的流程

1,       创建搜索器

创建的方法如下:

IndexSearcher searcher=new IndexSearcher(索引存放的路径);

使用searcher.search();

2,       封装用户输入的搜索条件

  如果用户搜索条件是,在标题中搜索Hello World,那么就可以用Term term=new Term(“title”,”Hello World”);来封装用户的搜索请求

  Term创建方式:

  Term term=new Term(“字段名称”,”关键词”);

  创建完Term完成搜索请求的封装后,需要将Term转换为可搜索的请求Query。最简单的Query q=new TermQuery(term);

3,       执行搜索

Query封装完后即可执行搜索。返回结果放在Hits中。

Hits hs=searcher.search(q);

4,       处理搜索结果

搜索结果由一组Document组成。Document又由一组Field组成。因此,获得搜索结果地思路是,从Hits中获得Document,Document中获得Field.提取搜索结果常用的方法有:

所属对象

方法名

方法描述

Hits

Document doc(int n)

返回指定序号的Document

Int id(int n)

返回指定序号的DocumentID属性

Int length()

返回Hits对象的长度,即Document得数量

Float score(int n)

返回指定序号的Documentscore属性,文档得分

Document

FieldgetField(Stringname)

根据Field的名称,返回Filed对象

List getFields()

返回该Document中所有的Field

Enumeration fields()

返回该Document中所有的Field

String get(String name)

根据field名称,返回field的值

Field

Byte[] binaryValue()

返回指定的Field的二进制值

Reader readerValue()

返回指定的Field的内容,以Reader的形式返回

String stringValue()

返回指定对象的字符串值

 

5,       关闭搜索器

Searcher.close();

搜索的简单示例

   搜索的HelloWorld

//BasicSearcher.java

package example.example;

 

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.Term;

import org.apache.lucene.search.Hits;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.TermQuery;

 

public class SimpleSearcher

{

    public static void main(String[] args) throws java.io.IOException

    {

       //索引存放的路径

       String indexPath = "./myindex";

       //搜索的域

       String searchField = "content";

       //搜索的语句

       String searchPhrase = "lucene";

       //

       StringBuffer sb = new StringBuffer("");

 

       //创建搜索器

       IndexSearcher searcher = new IndexSearcher(indexPath);

      

       //封装查询条件

       Term t = new Term(searchField, searchPhrase);

       Query q = new TermQuery(t);

      

       //执行搜索

       Hits hs = searcher.search(q);

      

       //处理搜索结果

       int num = hs.length();

      

       for(int i=0;i<num;i++)

       {

          

           //获得Document

           Document doc = hs.doc(i);

          

           //获得Filed

           Field fname = doc.getField("title");

           sb.append("title:" + "/n");

           //取对应域的值

           sb.append(fname.stringValue() + "/n");

          

           //获得Field

           Field fcontent = doc.getField("content");

           sb.append("content:" + "/n");

           sb.append(fcontent.stringValue()+ "/n");

          

           sb.append("------------------- " + "/n");

       }

       //关闭搜索器

       searcher.close();

      

       System.out.print(sb);      

    }

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值