-
多字段精确查询 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);
- 模糊查询,基于分词解析器
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);
- 分词解析器
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 已经实现了这两种分词算法。
-
创建索引
FieldType fieldType =new FieldType(); fieldType.setTokenized(true); fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS); fieldType.setStored(true); fieldType.freeze();//表示索引已被创建不能修改
Field类是文档索引期间很重要的类,控制着被索引的域值
变量名 释义 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 使对应的域值不被搜索
变量名 释义 Stroe.YES 存储域值,该情况下原始字符串全部被保存在索引中,对需要展示搜索结果的域有用,如URL,标题 Stroe.NO 不存储域值,通常跟Index.ANALYZED共同用来索引大的文本域值,不用恢复为初始格式
- 浏览: 58013 次
相关推荐
lucene笔记
《Lucene笔记共38页.pdf》是一部深入探讨Apache Lucene全文搜索引擎库的详细资料,这份笔记涵盖了Lucene的核心概念、关键技术和实际应用。Lucene是Java开发的开源信息检索库,广泛应用于各种搜索和信息提取场景。...
### Lucene知识点详解 #### 一、Lucene简介 **1.1 什么是Lucene** Lucene是一个由Apache基金会维护的开源全文检索引擎工具包。它为开发者提供了一个简便的接口,使得在应用程序中实现高效的全文检索功能成为可能...
### Lucene笔记:全文检索的实现机制 #### 全文检索与中文支持 在全文检索领域,Lucene作为一款开源的高性能全文检索引擎,被广泛应用于各种场景之中。特别是对于中文用户而言,如何确保Lucene能够高效地支持中文...
【Lucene】 Apache Lucene 是一个开源的全文检索库,属于Java开发的文本搜索工具包。它不是一个完整的搜索引擎,而是一组用于构建全文检索应用的基础组件。Lucene提供了核心的索引和搜索功能,包括分词、建立倒排...
lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记
【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...
传智播客Lucene课程课堂笔记
【Lucene 研究与读书笔记】 Lucene 是一个高性能、可扩展的全文检索库,它是Apache软件基金会的顶级项目之一,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene的核心概念,包括全文检索的基本原理、索引的创建...
**Lucene文档笔记详解** Lucene,源自Apache软件基金会4 Jakarta项目组,是一个备受开发者青睐的开源全文检索引擎工具包。它提供了强大的文本分析、索引构建和搜索功能,但值得注意的是,Lucene本身并不包含完整的...
关于lucene开发的工作笔记,详细的介绍了lucene的索引在创建过程中应该主意的一些事项和要求
**Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...
【Lucene学习笔记】 Lucene是一个高性能、全文检索的开源库,完全用Java编写,能够帮助开发者在应用程序中实现复杂的搜索引擎功能。它提供了强大的索引和搜索机制,使得从大量文本数据中快速找到相关信息变得简单。...
### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...