对lucene的一些关键类方法理解
来源:互联网 发布:淘宝没有添加销售属性 编辑:程序博客网 时间:2024/06/03 20:49
索引的维护操作都是由IndexReader类提供
QueryParser
lucene提供了一种类似于SQL语句的查询语句,我们姑且叫它lucene语句,通过它,你可以把各种查询一句话搞定,lucene会自动把它们查分成小块交给相应Query执行。
理解核心索引类
IndexWriter 可以想象成你可以对索引进行写操作的对象
Directory 代表Lucene索引的位置其中的两个类实现
第一个 FSDirectory它表示一个存储在文件系统中索引的位置
第二个 RAMDirectory它表示一个存储在内存当中的索引的位置
Analyzer 对文档内容进行分词处理
Document 类似数据库中的一条记录 Document的方法
void add(Fieldablefield)添加一个字段(Field)到Document
Stringget(String name)从文档中获得一个字段对应的文本
Field描述一个文档的某个属性
创建一个索引的大致过程
IndexWriter writer = new IndexWriter(INDEX_DIR,newStandardAnalyzer(),true);
Document doc = new Document();
doc.add(new Field(**));
writer.addDocument(doc);
writer.optimize();//合并索引并优化
witer.close();
理解核心搜索类
IndexSearch 是用来在建立好的索引上进行搜索的
它只能以只读的方式打开一个索引,所以可以有多个IndexSearcher的实例在一个索引上进行操作。
它提供几个搜索方法,其中一些在抽象基类Searcher中实现:
Search方法1
返回值为Hits性的对象:
public final Hits search(Query query)
public Hits search(Query,Filter)
public Hits search(Query,Sort sort)
public Hits search(Query query,Filterfilter,Sort sort)
Search方法2
返回索引中得分较高的文档集合,这些方法中,都带有一个int形式参数,表示取出置于TopDocs集合中的文档数量
public TopDocs search(Query query,Filterfilter,int n);
public abstract TopDocs search(Weightweight,Filter filter,int n);
public TopFieldDocs search(Query query,Filterfilter,int n,Sort sort);
public abstract TopFieldDocs search(Weightweight,Filter filter,int n,Sort sort);
Searcher方法3
public void search(Query query,Filterfilter,HitCollector results);
public void search(Query query,HitCollectorresult);
public abstract void search(Weighrweight,Filter filter,HitCollector results);
Term是搜索的基本单元。一个Term对象有两个String类型的域组成:字段的名称和字段的值。
在搜索时,你可能创建Term对象并和TermQuery同时使用。其中第一个参数代表了要在文档的哪一个Field上进行查找,第二个参数代表要查找的关键词
Query q = new TermQuery(enw Term(“fieldName”,”queryWord”));
Hits hit = searcher.search(q);
Query 是一个抽象类,这个类的目的是把用户输入的查询字符串封装成Lucene能够识别的Query。
TermQuery 是抽象类Query的一个子类,它同时也是Lucene支持的最为基本的一个查询类。生成一个TermQuery对象由如下语句完成
它的构造函数只接受一个参数,那就是一个Term对象。
TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”));
Hits是用来保存搜索的结果的,基于性能考虑,Hits的实例并不从索引中加载所有匹配查询的文档而是每次一小部分
关键词搜索的大致过程
IndexSearcher searcher = new IndexSearcher(INDEX_DIR);
Query q = new TermQuery(new Term(“contents”,”lucene”));
Hits hits = searcher.search(q);
for(int i=0;i<hits.length();i++){
Documentdoc = hits.doc(i);
Stringsummary = doc.get(“title”);
}
BooleanQuery布尔搜索
BooleanQuery是实际开发过程中经常使用的一种Query。
它其实是一个组合的Query,在使用时可以把各种Query对象添加进去并标注它们之间的逻辑关系。
BooleanQuery是可以嵌套的(BooleanQuery是一个布尔子句的容器)
一个BooleanQuery可以成为另一个BooleanQuery的条件子句
布尔型Query的子句数目不能超过1024
BooleanClause布尔搜索
public void add(Query query,BooleanClause.Occuroccur)
BooleanClause用于表示布尔查询子句关系的类,包括:
BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD
http://www.cnblogs.com/xing901022/p/3933675.html
- 对lucene的一些关键类方法理解
- lucene(一) lucene一些概念的理解
- 对Lucene PhraseQuery的slop的理解
- 对Lucene PhraseQuery的slop的理解
- 本人对String类的一些理解
- 黑马程序员_对绘图方法paint的一些理解
- U-boot-2009.03移植之六:对一些关键标号的理解以及start.s中代码重定向原理
- 对方法的理解
- 对一些概念的理解
- 对Jazz的一些理解
- 对鼠标的一些理解
- 对委托的一些理解
- 对递归的一些理解
- 对零点的一些理解
- 对c++的一些理解
- 一些对二插树的理解
- 对监控的一些理解
- 对壳的一些理解
- android开发Kotlin插件配置
- APT 软件工具 (Debian, Ubuntu 以及类似系统)
- android 利用accessibilityservice 实现自动发红包功能 (让收红包的人手抽筋)(密码不能自动输入,可以开启指纹支付)
- makefile(三):隐含规则
- Python3爬虫详解
- 对lucene的一些关键类方法理解
- npm和cnpm的安装(window)
- 今年余下时间的的目标
- 服务端解决跨域问题的方案(一)
- 查看文件内容
- 深度学习 CNN卷积神经网络 LeNet-5详解
- C语言编写杨辉三角
- 弹性与性能兼俱,阿里云神龙云服务器全解析
- OBS Windows 编译