`

Lucene(Lucence)建立索引(字段)

阅读更多
    Lucene,这是官方称谓,也有许多人叫它Lucence,做搜索和分词用的工具包.也有人说是Java下的搜索引擎框架库,见仁见智的说法罢了.不管叫什么,确实非常有用,比如做全站的搜索,其实它的用处远大于此,但凡涉及到文本搜索的地方就能用到它.我们就以做全站搜索为例,演示一下如何应用Lucene建立索引.
public void index(List<IArticle> list)
{
  //IArticle接口提供getName(标题)和getContent(内容)
  //list就是从数据库里查询出来的要建立索引的对象的列表
  if(list != null && list.size() > 0)
  {
    try {
           //标记是否重新建立索引,true为重新建立索引
           boolean flag = true;
           //如果已存在索引,则追加索引
           if(IndexReader.indexExists(path))
	  {
	     flag = false;
           }
	  ChineseAnalyzer ca = new ChineseAnalyzer();
	  IndexWriter indexWriter = new IndexWriter("c:/lucene/index",ca,flag);			
	  Document doc = null;
	  for(int i=0;i<list.size();i++)
          {
	    doc = new Document();
	    doc.add(new Field("title",article.getName(),Field.Store.YES,Field.Index.TOKENIZED));
	   //添加内容属性,内容只索引,不存储
	   doc.add(new Field("content",new StringReader(list.get(i).getContent())));
	   indexWriter.addDocument(doc);
	  }
           //优化并关闭
	  indexWriter.optimize();
	  indexWriter.close();
       } catch (Exception e) 
       {
	  // TODO 自动生成 catch 块
	  //e.printStackTrace();
       }
  }
}

简单说下需要注意的地方:
1.ChineseAnalyzer ca = new ChineseAnalyzer();这个是分析器,Lucene内置多个,处理中文搜索我会用ChineseAnalyzer.
2.IndexWriter indexWriter = new IndexWriter(c:/lucene/index,ca,true);处理索引的类,注意其构造方法里的最后一个参数,如果为true则表示,下次建立索引时会清除这次建立的索引重新建立索引,如果为false则表示追加索引,在原来索引的基础上追加.看实际情况定true或false.
3.doc.add(new Field("title",article.getName(),Field.Store.YES,Field.Index.TOKENIZED));这一句表示为文章标题建立索引并存储.
4.doc.add(new Field("content",new StringReader(list.get(i).getContent())));这句是为内容建立索引但不存储
   这样我们就为文章对象建立好索引了,然后就可以利用Lucene的其他类对这个索引目录进行搜索了,关于搜索部分我们稍后再补充上.
   下面是搜索部分的代码,写的简陋了点,比较简单,不再多说,请参看注释:
public class Search
{
  //定义一个索引搜索类对象
  private IndexSearcher searcher = null;
  //定义一个Query对象
  private Query query = null;
  //定义中文分析器
  ChineseAnalyzer analyzer = new ChineseAnalyzer();
  //构造方法里完成searcher的实例化
  public Search()
  {
    try
    {
     //这里的参数就是上面我们生成索引的目录
     searcher = new IndexSearcher(IndexReader.open("c:/lucene/index"));
    }catch(Exception e)
    {
      e.printStackTrace();
    }
  }
  public Hits search(String keyword) throws Exception
  {
    //开始搜索的时间
    Date start = new Date();
    //对我们索引的content字段进行搜索
    QueryParser qp = new QueryParser("content",analyzer);
    this.query = qp.parse(keyword);
    Hits hits = this.searcher.search(query);
    Date end = new Date();
    System.out.println("检索完成,用时"+(end.getTime()-start.getTime())+"毫秒");
    //////////打印测试////////
    if(hits != null && hits.length() > 0)
    {
      for(int i = 0; i < hits.length(); i++)
      {
        try
        {
          Document doc = hits.doc(i);
          System.out.println("结果"+(i+1)+":"+doc.get("title")+" createTime:"+doc.get("content")); 
          //System.out.println(doc.get("path"));
        }catch(Exception e)
        {
          e.printStackTrace();
        }
      }
    }
    return hits;
  }
  ///调用,主方法
  public static void main(String[] args)
  {
    try 
    {
      Search test = new Search();
      Hits h = test.search("你好");
    } catch (Exception e) 
    {
      // TODO 自动生成 catch 块
       e.printStackTrace();
    }
  }
}
分享到:
评论
1 楼 yaoyuebar 2008-05-29  
不错,入门写的挺详细的

相关推荐

    Lucene 索引的简单使用

    - **分词器(Tokenizer)**:分词器将输入的文本分解为一系列的词语,这是建立索引的第一步。 - **分析器(Analyzer)**:分析器结合了分词器、过滤器等,负责对文本进行预处理,如去除停用词、词形还原等。 ### 2...

    Lius.jar能运行的lucence查看索引的小工具

    它允许用户直接浏览和分析已经建立的Lucene索引,这对于开发者来说,尤其是在理解和优化索引性能时,具有极大的价值。通过这个工具,我们可以深入了解Lucene索引的工作机制,包括文档的存储方式、分词过程以及倒排...

    Lucence创建索引

    - **是否重新建立索引**:如果设置为 `true`,则会清空原有索引并重新建立;若为 `false`,则会在现有索引基础上进行增量更新。 ##### 2. Document - **定义**:表示一条索引内容的集合,类似于数据库中的单条...

    lucence.net查询

    本文将深入探讨Lucene.NET的多字段查询、建立索引以及组合查询等核心知识点。 一、Lucene.NET基础 1. **建立索引**:Lucene.NET的核心功能之一是创建全文索引,这使得快速检索成为可能。首先,我们需要创建一个`...

    springboot整合lucence完整代码

    现在,我们需要创建一个Lucene索引服务类,负责将数据库中的文章内容建立索引。这个类会使用Lucene提供的API创建索引,并对数据库中的数据进行操作: ```java @Service public class LuceneIndexService { private...

    lucene实现企业产品检索

    Lucene的核心是建立索引,将原始文本数据转化为结构化的、便于查询的数据结构。这个过程包括文本分析(Tokenization)、词干提取(Stemming)、去停用词(Stopword Removal)等步骤。在这个例子中,我们采用庖丁解牛...

    Lucene示例 BM25相似度计算

    这个过程包括分析文本、创建文档、添加字段、分词、建立词典等步骤。通过索引,可以快速定位到包含特定词项的文档。 接下来是查询阶段。在Lucene中,查询可以是简单的关键词,也可以是复杂的布尔表达式。查询解析器...

    Lucene4.10.3索引+查询

    - **分词器(Tokenizer)**:将输入文本分解成独立的词语,这是建立索引的第一步。 - **搜索器(Searcher)**:负责执行查询,返回匹配结果。 - **查询解析器(Query Parser)**:将用户的查询字符串转化为Lucene...

    lucence视频全面例子

    1. 建立索引:首先,我们需要创建一个`Directory`对象来存储索引,然后使用`IndexWriter`来添加和更新文档。 2. 搜索操作:利用`IndexSearcher`进行查询,`QueryParser`解析查询字符串,返回`TopDocs`对象,其中...

    lucence全文检索引擎

    1. 创建索引:使用Analyzer分析文档内容,通过IndexWriter建立索引。 2. 查询:使用QueryParser解析查询字符串,生成Query对象。 3. 搜索:Searcher执行查询,返回TopDocs对象,包含匹配的文档及其评分。 4. 结果...

    lucene文档笔记详解

    通过分词器将原始文档分割为关键词,并建立倒排索引,使得搜索时能快速定位到包含特定关键词的文档。 2. **分词器(Tokenizer)**:分词器是Lucene中处理文本的关键组件,它负责将输入的文本分解为一系列可搜索的...

    Lucence的资料和例子

    - **索引**:Lucene通过建立倒排索引来实现快速搜索,索引过程包括分词、分析、建立索引等步骤。 - **分词器(Tokenizer)**:将输入文本分解成可搜索的词语。 - **分析器(Analyzer)**:处理分词结果,如去除...

    lucence入门HelloWorld

    1. **索引过程**:Lucene 的核心是建立索引,将原始文本数据转化为可供快速搜索的结构。这个过程包括分析(Analyzer)文本、创建文档(Document)、字段(Field)和术语(Term)。分析器负责将输入文本分割成可搜索...

    Lucene 搜索方法(短语搜索)

    例如,它可能包括创建`IndexWriter`来建立索引,以及`IndexReader`和`IndexSearcher`来读取索引并执行查询的代码。同时,它也可能包含如何解析和添加文档到索引的逻辑。 总结一下,Lucene的短语搜索通过`...

    lucene 全文检索数据库

    Lucene通过建立倒排索引来实现全文检索,这种方法将文档中的词汇映射到包含该词汇的文档列表,大大提高了搜索效率。 ### Lucene在Java中的应用 在Java开发中,使用Lucene进行全文检索通常涉及以下步骤: 1. **...

    学习lucence的一个比较好的手册

    搜索则是在建立索引后进行的操作。Lucene支持多种查询类型,如布尔查询、短语查询、范围查询等,用户可以通过编写查询解析器(QueryParser)来构建复杂的查询条件。此外,评分系统(Scoring)是Lucene的另一个关键...

    用Lucene检索数据库

    3. **建立索引** - 使用`IndexWriter`将`Document`添加到索引中,`luceneWriter.addDocument(doc)`。 - 索引文件通常存储在本地文件系统上,如本例中的"d:/index/"路径。 4. **搜索操作** - 编写搜索程序,通过...

Global site tag (gtag.js) - Google Analytics