`

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笔记

    lucene 笔记

    lucene笔记共38页.pdf.zip

    lucene笔记共38页.pdf.zip

    Lucene笔记.doc

    Lucene笔记中包含了 什么是lucene 应用领域 创建索引 使用luke查看索引 搜索索引 Field域的详细介绍 各种类型的搜索 使用中文分词器

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

    对于中文用户来说,最关心的问题是其是否支持中文的全文检索。但通过后面对于Lucene的结构的介绍,你会了解到由于Lucene良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。

    lucene使用总结笔记

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

    Lucene 课堂笔记

    传智播客lucene课堂笔记,和大家分享下,就是上课的时候记的

    本人的Lucene2.9学习笔记

    本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记

    传智播客Lucene课程课堂笔记

    传智播客Lucene课程课堂笔记

    Lucene 3.6 学习笔记

    第一章 LUCENE基础 2 1.1 索引部分的核心类 2 1.2 分词部分的核心类 2 1.3 搜索部分的核心类 2 第二章 索引建立 3 2.1 创建Directory 3 2.2 创建Writer 3 2.3 创建文档并且添加索引 4 2.4 查询索引的基本信息 5 2.5 ...

    lucene课程笔记

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

    Lucene部分笔记

    一些Lucene类的常用方法,初学者可以看一下,来自《开发自己的搜索引擎》一书。

    lucene学习笔记

    lucene学习笔记,lucene入门必备材料

    Lucene学习笔记(一)Lucene入门实例

    NULL 博文链接:https://kylinsoong.iteye.com/blog/719415

    Lucene数据搜索笔记

    Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎...

Global site tag (gtag.js) - Google Analytics