`

Lucene笔记

 
阅读更多
  1. 多字段精确查询  MultiFieldQueryParser使用
    Analyzer analyzer = new StandardAnalyzer();
    		 reader=DirectoryReader.open(directory);  
    		searcher=new IndexSearcher(reader);
    		//对应的字段
    		String[] fields = { CommonVars.FILE_ARCHIVE_CATEGORY_ENUM ,CommonVars.FILE_NAME, CommonVars.FILE_BELONGYEAR, CommonVars.FILE_UPLOAD_USER, CommonVars.FILE_DESC}; 
    		//每个字段之间的关系 AND  OR
    		BooleanClause.Occur[] clauses = { BooleanClause.Occur.MUST ,BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD};  
    		//每个字段查询的内容,这里没有启用模糊查询都是精确查询
    		String[] queries = {indexType, content, content,content,content}; 
    		Query query = MultiFieldQueryParser.parse(queries, fields, clauses, analyzer);
    		
    		LOGGER.debug("查询语句:" + query);
    		TopDocs topDocs = searcher.search(query,INDEX_SEARCH_MAXSIZE+1);
    		LOGGER.debug("总共匹配多少个:" + topDocs.totalHits);
    		ScoreDoc[] hits = topDocs.scoreDocs;
    		// 应该与topDocs.totalHits相同
    		LOGGER.debug("多少条数据:" + hits.length);
      
  2. 模糊查询,基于分词解析器
    	Analyzer analyzer = new StandardAnalyzer();
    		 reader=DirectoryReader.open(directory);  
    		searcher=new IndexSearcher(reader);
    		//对应的字段
    		String queryStr="+("+indexType+") +( "+LuceneVar.INDEX_OBJNAME+":"+content+" "+LuceneVar.INDEX_OBJDESC+":"+content
    											+" "+LuceneVar.INDEX_OBJCREATOR+":"+content  +")";
    		
    		QueryParser parser=new QueryParser(LuceneVar.LUCENE_INDEX_TYPE_ENUM,analyzer);
    		
    		Query query =parser.parse(queryStr);
    		LOGGER.debug("查询语句:" + query);
    		TopDocs topDocs = searcher.search(query,INDEX_SEARCH_MAXSIZE+1);
    		LOGGER.debug("总共匹配多少个:" + topDocs.totalHits);
    		ScoreDoc[] hits = topDocs.scoreDocs;
    		// 应该与topDocs.totalHits相同
    		LOGGER.debug("多少条数据:" + hits.length);
     
  3. 分词解析器

    1)、 StopAnalyzer

    StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能。

    2)、 StandardAnalyzer

    StandardAnalyzer根据空格和符号来完成分词,还可以完成数字、字母、E-mail地址、IP地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer能够实现的过滤功能。

    3)、 SimpleAnalyzer

    SimpleAnalyzer具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号。分词器不能做词汇的过滤,之进行词汇的分析和分割。输出地词汇单元完成小写字符转换,去掉标点符号等分割符。

    在全文检索系统开发中,通常用来支持西文符号的处理,不支持中文。由于不完成单词过滤功能,所以不需要过滤词库支持。词汇分割策略上简单,使用非英文字符作为分割符,不需要分词词库的支持。

    4)、 WhitespaceAnalyzer

    WhitespaceAnalyzer使用空格作为间隔符的词汇分割分词器。处理词汇单元的时候,以空格字符作为分割符号。分词器不做词汇过滤,也不进行小写字符转换。

    实际中可以用来支持特定环境下的西文符号的处理。由于不完成单词过滤和小写字符转换功能,也不需要过滤词库支持。词汇分割策略上简单使用非英文字符作为分割符,不需要分词词库支持。

    5)、 KeywordAnalyzer

    KeywordAnalyzer把整个输入作为一个单独词汇单元,方便特殊类型的文本进行索引和检索。针对邮政编码,地址等文本信息使用关键词分词器进行索引项建立非常方便。

    6)、 CJKAnalyzer

    CJKAnalyzer内部调用CJKTokenizer分词器,对中文进行分词,同时使用StopFilter过滤器完成过滤功能,可以实现中文的多元切分和停用词过滤。在Lucene3.0版本中已经弃用。

    7)、 ChineseAnalyzer

    ChineseAnalyzer功能与StandardAnalyzer分析器在处理中文是基本一致,都是切分成单个的双字节中文字符。在Lucene3.0版本中已经弃用。

    8)、 PerFieldAnalyzerWrapper

    PerFieldAnalyzerWrapper功能主要用在针对不同的Field采用不同的Analyzer的场合。比如对于文件名,需要使用KeywordAnalyzer,而对于文件内容只使用StandardAnalyzer就可以了。通过addAnalyzer()可以添加分类器。

    9)、 IKAnalyzer

    实现了以词典为基础的正反向全切分,以及正反向最大匹配切分两种方法。IKAnalyzer是第三方实现的分词器,继承自Lucene的Analyzer类,针对中文文本进行处理。

    10)、JE-Analysis

    JE-Analysis是Lucene的中文分词组件,需要下载。

    11)、 ICTCLAS4J

    ictclas4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。

    12)、 Imdict-Chinese-Analyzer

    imdict-chinese-analyzer 是 imdict智能词典 的智能中文分词模块,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene搜索引擎提供简体中文分词支持。

    13)、 Paoding Analysis

    Paoding Analysis中文分词具有极 高效率 和 高扩展性。引入隐喻,采用完全的面向对象设计,构思先进。其效率比较高,在PIII 1G内存个人机器上,1秒可准确分词100万汉字。采用基于不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析。

    14)、 MMSeg4J

    mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。

  4. 创建索引
    			FieldType fieldType	 =new FieldType();
    			
    			fieldType.setTokenized(true);
    			fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);
    			
    			fieldType.setStored(true);
    			fieldType.freeze();//表示索引已被创建不能修改
    		
     Field类是文档索引期间很重要的类,控制着被索引的域值

     

    Field.Store.* 域存储选项通过倒排序索引来控制文本是否可以搜索

     

    变量名 释义
    Index.ANALYZED 使用分析器将域值分解成独立的语汇单元流,并使每个语汇单元都能被搜索,适用于普通文本域
    Index.NOT_ANALYZED 对域进行索引,但不对String进行分析,将域值作为单一的语汇单元,适用于索引那些不能被分解的域值,如URL,文件路径,电话号码等
    Index.ANALYZED_NO_NORMS 不会在索引中存储norms信息,norms记录了索引中的index-time boost信息,当你进行搜索时比较费内存
    Index.NOT_ANALYZED_NO_NORMS 同上,也不存储norms信息,在搜索时减少索引空间和内存耗费Index.No 使对应的域值不被搜索
    Index.No 使对应的域值不被搜索

     

    Field.Index.* 域索引选项确定是否要存储域的真实值,以便后续继续搜索时能恢复这个
    变量名 释义
    Stroe.YES 存储域值,该情况下原始字符串全部被保存在索引中,对需要展示搜索结果的域有用,如URL,标题
    Stroe.NO 不存储域值,通常跟Index.ANALYZED共同用来索引大的文本域值,不用恢复为初始格式

     

分享到:
评论

相关推荐

    lucene笔记.pdf

    lucene笔记

    lucene笔记共38页.pdf.zip

    《Lucene笔记共38页.pdf》是一部深入探讨Apache Lucene全文搜索引擎库的详细资料,这份笔记涵盖了Lucene的核心概念、关键技术和实际应用。Lucene是Java开发的开源信息检索库,广泛应用于各种搜索和信息提取场景。...

    lucene笔记

    ### Lucene知识点详解 #### 一、Lucene简介 **1.1 什么是Lucene** Lucene是一个由Apache基金会维护的开源全文检索引擎工具包。它为开发者提供了一个简便的接口,使得在应用程序中实现高效的全文检索功能成为可能...

    Lucene笔记:全文检索的实现机制

    ### Lucene笔记:全文检索的实现机制 #### 全文检索与中文支持 在全文检索领域,Lucene作为一款开源的高性能全文检索引擎,被广泛应用于各种场景之中。特别是对于中文用户而言,如何确保Lucene能够高效地支持中文...

    Lucene笔记.doc

    【Lucene】 Apache Lucene 是一个开源的全文检索库,属于Java开发的文本搜索工具包。它不是一个完整的搜索引擎,而是一组用于构建全文检索应用的基础组件。Lucene提供了核心的索引和搜索功能,包括分词、建立倒排...

    lucene使用总结笔记

    lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记

    Lucene 3.6 学习笔记

    【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...

    传智播客Lucene课程课堂笔记

    传智播客Lucene课程课堂笔记

    Lucene研究,Lucene 读书笔记

    【Lucene 研究与读书笔记】 Lucene 是一个高性能、可扩展的全文检索库,它是Apache软件基金会的顶级项目之一,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene的核心概念,包括全文检索的基本原理、索引的创建...

    lucene文档笔记详解

    **Lucene文档笔记详解** Lucene,源自Apache软件基金会4 Jakarta项目组,是一个备受开发者青睐的开源全文检索引擎工具包。它提供了强大的文本分析、索引构建和搜索功能,但值得注意的是,Lucene本身并不包含完整的...

    lucene课程笔记

    关于lucene开发的工作笔记,详细的介绍了lucene的索引在创建过程中应该主意的一些事项和要求

    Lucene 学习笔记 1

    **Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...

    Lucene学习笔记.doc

    【Lucene学习笔记】 Lucene是一个高性能、全文检索的开源库,完全用Java编写,能够帮助开发者在应用程序中实现复杂的搜索引擎功能。它提供了强大的索引和搜索机制,使得从大量文本数据中快速找到相关信息变得简单。...

    lucene3.5学习笔记

    ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

Global site tag (gtag.js) - Google Analytics