`
橄榄绿
  • 浏览: 277149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lucene 2.4的实例

阅读更多

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Fieldable;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;

import com.ole.factory.BeanFactory;

public class TestLucene {
//索引目录
public static final String INDEX_DIR=System.getProperty("user.dir")+
   "/index_dir";
public static final String LUCENE_DATA=System.getProperty("user.dir")+
   "/lucene_data";
private String[] columnNameArr ={"id","ordercode","incompanyname","outcompanyname",
    "buydate","saledate","buygoodsnum","salegoodsnum","buyprice","saleprice",
    "trucknum","empcode1","empcode2","losskg","goodscode","orderemp",
    "orderdate","orderstate","batchno_out","batchno_in","ys","ss","ysye",
    "yf","sf","yfye","carry_in","carry_out"};
/**
   * 获取数据库数据
   */
@SuppressWarnings("unchecked")
public List<Map<String,Object>> queryOrderIO(){
   BeanFactory beanFac = BeanFactory.getInstance();
    IOrderIOService orderService= (IOrderIOService)beanFac.
     getApplicationnContext().getBean("orderIOService");
   return (List<Map<String,Object>>)orderService.queryOrderIO();
}

/**
* 创建索引
*/
public void createIndex() {
   synchronized (INDEX_DIR) {
    List<Map<String,Object>> resultList = queryOrderIO();
          Date start=new Date();      
          Analyzer analyzer=new StandardAnalyzer();  
          try {  
        IndexWriter writer=new IndexWriter(INDEX_DIR,analyzer,
          true,MaxFieldLength.UNLIMITED);
        /***********************/
        for(Map<String,Object> rowItem : resultList){
         Document doc=new Document();
//         Set<String> columns = rowItem.keySet();
         for(String columnItem : columnNameArr){
          Field fieldvalue= new Field(columnItem,
            rowItem.get(columnItem)!=null?rowItem.get(columnItem).toString():"",
            Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);//Field.TermVector.NO暂不需要分词
          doc.add(field_value);
         }
         writer.addDocument(doc);
        }
       
         writer.optimize();  
         writer.close();  
         Date end=new Date();  
         long indexTime=end.getTime()-start.getTime();  
         System.out.println("索引完成所需时间:(ms)");  
         System.out.println(indexTime);  
      } catch (CorruptIndexException e) {  
       e.printStackTrace();  
      } catch (LockObtainFailedException e) {  
       e.printStackTrace();  
      } catch (IOException e) {  
       e.printStackTrace();  
      }  
          System.out.println("创建索引完成!");
   }
}

/**
   * 跟据关键字查询
   */
public void searchIndex(String queryString,String columnName){
   try{
    IndexSearcher isearcher = new IndexSearcher(INDEX_DIR);
//    BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD};
//        TopDocCollector collector = new TopDocCollector(10000);
//        QueryParser parser = new QueryParser(INDEX_DIR, new StandardAnalyzer());
//        Query query = parser.parse(queryString);
        Query query = new QueryParser(columnName,new StandardAnalyzer()).parse(queryString);
//         MultiFieldQueryParser.parse(queryString,
//           columnName, new StandardAnalyzer());
//        isearcher.search(query, collector);
        ScoreDoc[] hits = isearcher.search(query, isearcher.maxDoc()).scoreDocs;
        System.out.println("hits.length="+hits.length);
        for (int i = 0; i < hits.length; i++) {
           Document doc = isearcher.doc(hits[i].doc);
           for(String column : columnNameArr){
           System.out.println(column+"="+doc.get(column));
           }
           System.out.println("=========================");
    }
        isearcher.close();
   }catch (Exception e) {
        e.printStackTrace();
   }
}
  
   
// /**
//   * 庖丁解牛分析器
//   */
// public synchronized Analyzer getAnalyzer() {
//      return new PaodingAnalyzer();
// }



public static void main(String[] args){
   TestLucene testLucene = new TestLucene();
//   testLucene.createIndex();
   testLucene.searchIndex("2009-08-01","buydate");
//   testLucene.searchIndex("ordercode","S200908040062",
//     new StandardAnalyzer());
}
}  
/*
* 索引域:Field是Document对象的基本组成单位,每个Field存储了实际的所有文本数据,这些文本数据在内部调用了分析器Aanlyzer的索引项结果
* Field内的检索查询最终以索引项为单位的.比索引更小的单位无法检索到
* 中文的索引项一中文分词的结果为检索单元,英文的索引项是以单词为检索单元,检索单元为最小的检索单位
* 1.public Field(String name, byte[] value, Store store)
* 2.public Field(String name, byte[] value, int offset, int length, Store store)
* 3.public Field(String name, String value, Store store, Index index)
* 4.public Field(String name, String value, Store store, Index index, TermVector termVector)
* 5.public Field(String name, Reader reader)
* 6.public Field(String name, Reader reader, TermVector termVector)
* 7.public Field(String name, TokenStream tokenStream)
* 8.public Field(String name, TokenStream tokenStream, TermVector termVector)
* 第1,2个函数用于二进制数据索引;3,4用于直接给定字符串的索引,5,6用于文件内容的索引,即Reader数据流(常用)
* name-域名为固定的参数,用于指定添加域的标识,限定检索的范围或提取属性值
* value-
* Store-控制域数据的存储,表示数据本身是否存储(注意:并不是指索引是否存储)
*       1.Store.NO 只保存索引,不包含数据本身信息,减少空间采用
*       2.Store.YES 保存索引并保存数据原始信息
*       3.Store.COMPRESS 存储并压缩原始信息
* Index-控制索引格式的参数,表示数据是否需要索引,即当前域是否需要用于检索
*       1.Index.NO 不索引,只作为辅助信息
*       2.Index.ANALYZER   2.4版本替换6
*       3.Index.NOT_ANALYZER 2.4版本替换7
*       4.Index.ANALYZER_NO_NORMS
*       5.Index.NOT_ANALYZER_NO_NOTRMS  
*       6.Index.TOKENIZED 使用分词器并建立索引
*       7.Index.UN_TOKENIZED 不分词建立索引(某些内容的整体作为索引)
*       8.Index.NO_NORMS 禁用分析器处理
* TermVector-域内信息是否需要分词,在中文处理中分词是索引的基础
*         TermVector保存Token.getPositionIncrement() 和Token.startOffset() 以及Token.endOffset() 信息
*       1.Field.TermVector.NO:不保存term vectors
*       2.Field.TermVector.YES:保存term vectors
*       3.Field.TermVector.WITH_POSITIONS:保存term vectors.(保存值和token位置信息)
*       4.Field.TermVector.WITH_OFFSETS:保存term vectors.(保存值和Token的offset)
*       5.Field.TermVector.WITH_POSITIONS_OFFSETS:保存term vectors.(保存值和token位置信息和Token的offset)  
*/

分享到:
评论

相关推荐

    Lucene 2.4 入门例子

    **Lucene 2.4 入门例子** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用中的信息检索。在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和...

    Lucene2.4完美样例+中文文档

    **Lucene 2.4 完美样例与中文文档详解** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它为开发者提供了在 Java 应用程序中实现全文检索功能的强大工具。Lucene 2.4 版本是其历史上的一个重要...

    lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档

    《Lucene 2.4与Nutch学习笔记:在多文本文档中搜索关键词》 Lucene是一个高性能、全文本搜索引擎库,它为开发者提供了在Java应用程序中实现全文搜索功能的基本工具。Nutch则是一个开源的网络爬虫项目,用于抓取...

    lucene全文检索简单索引和搜索实例

    《Lucene全文检索:简单索引与搜索实例详解》 Lucene是Apache软件基金会的开源项目,是一款强大的全文检索库,被广泛应用于Java开发中,为开发者提供了构建高性能搜索引擎的能力。在本文中,我们将深入探讨如何基于...

    lucene的封装和性能优化

    例如,可以创建一个QueryParser类,处理用户输入的关键词,进行分词、分析和逻辑组合,生成相应的Query实例。 #### 2.3 搜索服务 封装搜索服务是为了提供统一的搜索接口,可以包括分页搜索、高亮显示、排序等功能...

    SSH+compass 整合

    本资源是struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0整合实例,可以为初学入门者,提供个参考,本人也是网上找的,感觉很不错(因其中所用的jar文件太大,无法上传,大家可以自己添加各框架...

    Lucene简单使用需要的jar

    - **commons-io-2.4.jar**:Apache Commons IO是Java的一个工具库,提供了大量的I/O操作辅助类,如文件读写、流操作等,对于处理Lucene的文件操作非常有用。 **使用步骤** 1. **创建索引**:首先,需要创建一个`...

    lucene-5.4.0

    4.2 案例分析:分享基于Lucene 5.4.0的搜索引擎构建实例,例如新闻网站的全文搜索、电商产品的推荐系统等。 五、未来发展趋势 5.1 版本迭代:探讨Lucene后续版本的新特性,如6.x、7.x引入的创新技术。 5.2 社区...

    lucene的使用

    如果项目中需要操作文件,可能还需要commons-io-2.4.jar包。 二、创建索引: 1. 选择原始文档所在的目录和索引库要存放的目录。 2. 使用FSDirectory.open()方法打开索引库目录,创建IndexWriter对象用于写入索引...

    基于Lucene的分布式搜索设计说明书

    然而,单个 Lucene 实例可能无法应对大规模的数据量,因此,将 Lucene 集成到分布式系统中,实现分布式搜索,成为了提高检索效率和可扩展性的有效解决方案。 ### 1. 引言 #### 1.1 目的 本设计说明书旨在详细阐述...

    lucune3.0 及高亮显示 所需的包及代码

    4. 创建一个Highlighter实例,设置Analyzer和Query。 5. 调用Highlighter的方法,传入原文本和匹配的Term,得到高亮后的文本片段。 6. 将高亮的文本片段返回给用户界面展示。 以上就是关于“lucune3.0 及高亮显示 ...

    lucene_7_4_0

    通过设置断点,观察类的实例化过程,跟踪方法调用,可以深入了解Lucene的实现细节。 总结,Lucene 7.4.0作为一款强大的全文搜索引擎库,其在Java开发环境中提供了高效、灵活的搜索解决方案。通过IDEA工程的集成,...

    solr教程+实例

    1.1 Solr的起源与发展:Solr最初由Yonik Seeley创建,后来成为Apache Lucene项目的一部分,发展至今已成为全球范围内广泛使用的搜索平台。 1.2 Solr的主要功能:Solr不仅提供全文索引,还支持多种数据类型(如日期、...

    hibernate_search

    ##### 2.4 索引与查询 - **索引**:通过 Hibernate Session 的 API 对实体进行增删改操作时,Hibernate Search 会自动更新 Lucene 索引。 - **查询**:可以使用 Lucene 查询语法或 Hibernate Search 提供的高级查询...

    SOLR的应用教程

    2.4 配置文件说明 主要讨论schema.xml和solrconfig.xml这两个核心配置文件的作用和配置项。 **三、Solr的应用** 3.1 SOLR应用概述 介绍Solr的应用场景和使用流程。 3.2 一个简单的例子 包括Solr Schema设计、构建...

    Solr初体验

    Apache Solr 是一款开源的全文搜索引擎,基于 Lucene 库,提供了高效、可扩展的搜索和分析功能。它不仅用于网站的全文检索,还广泛应用于企业级的文档检索、商品搜索以及数据挖掘等领域。这篇博客将带你初次接触 ...

    JeeSite开发说明文档

    - **全文搜索**:Hibernate Search 4.2 (Apache Lucene 3.6)、IKAnalyzer 2012_u6 - **日志管理**:Log4j 1.2 这些技术的选择不仅体现了JeeSite对于稳定性和性能的追求,也反映了其对于开发便捷性和社区支持的关注...

    Hibernate Annotation Reference

    - **2.2.4.2 单表继承**:`@DiscriminatorColumn`和`@DiscriminatorValue`用于区分子类实例。 - **2.2.4.3 子类联接**:`@Inheritance(strategy = InheritanceType.JOINED)`。 - **2.2.4.4 继承属性**:子类可以继承...

Global site tag (gtag.js) - Google Analytics