lucene是基于java的全文搜索引擎框架
lucene的存储结构
lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索
IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,
WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;
相应地lucene提供了FSDirectory和RAMDirectory两个类。
Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。
Field:字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;
Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,
WildcardQuery等一些类。
QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。
Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,
搜索的结果的集合是用Hits类的实例来表示的。
对索引库的操作可以分为两种:管理与查询。管理索引库使用IndexWriter,从索引库中查询使用IndexSearcher。
Lucene的数据结构为Document与Field。Document代表一条数据,
Field代表数据中的一个属性。一个Document中有多个Field,Field的值为String型,因为Lucene只处理文本。
我们只需要把在我们的程序中的对象转成Document,就可以交给Lucene管理了,搜索的结果中的数据列表也是Document的集合。
lucene 的分词器
概念:将文本按规则切分为一个个可以进行索引的最小单位(关键词)
注意:在建立索引和搜索时都要用同一个分词器
英文分词器:
英文的工作过程如下: a,of,the, worked,working 变成work
输入文本-> 关键词切分 -> 去除停留字 -> 形态还原 -> 转为小写
中文分词器:
单个字分词:StandAnalyzer
两个字分词:CJKAnayzer
词典分词:按照某种算法构造词,然后就去匹配已经建立好的的词库中查找
,如果匹配到就切分为词语。MManalyzer(极易分词),庖丁分词
lucene 的查询
1.可以通过lucene的类似sql语法的字符串查询语法来查找
关键字查询-name:"hello"
范围查询- age:[18 TO 60],age:{18 TO 60},[]表示是包过边界值,而{}不包括,这里TO一定是大写
通配符查询- name:爱*,name:*爱*,name:我?
'?' 代表一个字符, '*' 代表0个或多个字符
短语查询- content: "?爱你??莉莉",content:"爱你莉莉"~2
2.通过Query的具体实现类的实例才实现查询
TermQuery 关键字查找
RangerQuery 范围查询
lucene 的排序
WildcardQuery 通配符查询
PhraseQuery 短语查询
1.lucene默认的相关度排序
每个Field,Document都一个boost值,用来计算相关度值
可以在搜索的时候指定field的boost
//设置field的boost值
Map<String, Float> boosts = new HashMap<String, Float>();
boosts.put("name", 3f);
// boosts.put("content", 1.0f); 默认为1.0f
在索引的时候指定boost值
Document doc = File2DocumentUtils.file2Document(filePath);
doc.setBoost(3f);
indexDao.save(doc);
Document doc2 = File2DocumentUtils.file2Document(filePath2);
// doc2.setBoost(1.0f);
2.自定义排序
// ========== 排序
Sort sort = new Sort();
sort.setSort(new SortField("size")); // 默认为升序
// sort.setSort(new SortField("size", true));//true表示降序
lucene过滤器的使用filter
filter会大大降低查询的效率,应该慎重使用
RangeFilter可以对搜索出来的结果过滤
Filter filter = new RangeFilter("size", NumberTools.longToString(200)
, NumberTools.longToString(1000), true, true);
TopDocs topDocs = indexSearcher.search(query, filter, 10000, sort);
分享到:
相关推荐
**Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...
【Lucene学习笔记】 Lucene 是一款开源的全文检索框架,由Apache软件基金会维护,它提供了高效的、可扩展的搜索引擎功能。不同于一个完整的应用程序,Lucene 提供的是一个基础组件,开发者可以将其集成到自己的应用...
NULL 博文链接:https://kylinsoong.iteye.com/blog/719415
lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...
10. **lucene学习笔记 3 .txt** 这是作者的学习笔记,可能包含了个人理解和使用Lucene过程中遇到的问题及解决方案,提供了不同角度的见解和实践经验。 通过这些文档,你可以系统地学习和掌握Lucene的各个方面,从...
【Lucene 3.6 学习笔记】 Lucene 是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发。本文将深入探讨Lucene 3.6版本中的关键概念、功能以及实现方法。 ### 第一章 Lucene 基础 #### 1.1 索引部分的核心...
Lucene学习笔记(二)可能涉及索引构建过程,讲解了如何使用Document对象存储文档内容,Field对象定义字段属性,以及如何使用IndexWriter进行索引更新和优化。 笔记(三)和(四)可能深入到查询解析和执行。查询解析器...
### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...
Lucene学习笔记.doc nutch_tutorial.pdf nutch二次开发总结.txt nutch入门.pdf nutch入门学习.pdf Nutch全文搜索学习笔记.doc Yahoo的Hadoop教程.doc [硕士论文]_基于Lucene的Web搜索引擎实现.pdf [硕士论文]_基于...
Lucene 学习笔记是指如何学习和使用 Lucene。我们可以通过学习 Lucene 的使用和实现来掌握 Lucene。 Solr 学习笔记 Solr 学习笔记是指如何学习和使用 Solr。我们可以通过学习 Solr 的使用和实现来掌握 Solr。 ...
1> lucene学习笔记 2> 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 4.1.2. 示例 4 4.2...