- 浏览: 579351 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (253)
- java (84)
- python (22)
- 设计模式 (12)
- 数据结构和算法 (7)
- ibatis (1)
- 数据挖掘 (2)
- 集体智慧读书笔记 (1)
- ubuntu (4)
- lucene (11)
- 算法 第4版 (11)
- apache mina (16)
- memcached (1)
- android (9)
- netty (6)
- mongodb (2)
- maven (2)
- openfire (2)
- 服务端 (21)
- 产品 (0)
- apache (1)
- 选择 (2)
- 构架WEB高性能站点 (7)
- redis (8)
- 诗词歌赋 (3)
- 源代码阅读 (5)
- 前端 (1)
- javascript (3)
- guice (1)
- 分布式 (5)
- 总结-2014 (4)
- jvm (1)
最新评论
-
liu_jiaqiang:
写的挺好
maven多项目管理 -
H972900846:
我想知道哪里整的,如果是自己写的,那有点牛呀如果是抄的请说明出 ...
SSL身份认证原理 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
定向网站爬虫---初级例子 -
fenglingabc:
经过测试,parameterType="java.u ...
mybatis获取主键和存储过程返回值 -
jyghqpkl:
[u][/u] ...
Cookie的secure 属性
转载:http://zhxmyself.iteye.com/blog/466066
应用BooleanQuery进行组合查询时,条件之间的关系是由类BooleanClause.Occur控制的,BooleanClause.Occur中提供了三个参数值进行控制,分别是BooleanClause.Occur.MUST
BooleanClause.Occur.MUST_NOT
BooleanClause.Occur.SHOULD
它们的组合关系代表的意思如下:
1、MUST和MUST表示“与”的关系,即“并集”。
2、MUST和MUST_NOT前者包含后者不包含。
3、MUST_NOT和MUST_NOT没意义
4、SHOULD与MUST表示MUST,SHOULD失去意义;
5、SHOUlD与MUST_NOT相当于MUST与MUST_NOT。
6、SHOULD与SHOULD表示“或”的概念。
BooleanQuery的条件生成方法如下:
Term term1 = new Term(FIELD_CONTENT,"共");
TermQuery q1 = new TermQuery(term1);
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(q1, BooleanClause.Occur.MUST);
- package com.zhx.test;
- import java.io.IOException;
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.index.CorruptIndexException;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.index.Term;
- import org.apache.lucene.search.BooleanClause;
- import org.apache.lucene.search.BooleanQuery;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.ScoreDoc;
- import org.apache.lucene.search.Searcher;
- import org.apache.lucene.search.TermQuery;
- import org.apache.lucene.search.TopDocs;
- import org.apache.lucene.store.LockObtainFailedException;
- public class BooleanQuerySearcher {
- /**
- * @param args
- */
- public static void main(String[] args) {
- //索引目录
- String IDNEX_PATH = "Z:/data/paoding/test_index";
- //字段名
- String FIELD_NAME = "field_name";
- //字段名
- String FIELD_CONTENT = "field_content";
- //获取Paoding中文分词器
- Analyzer analyzer = new StandardAnalyzer();
- //建立索引
- IndexWriter writer;
- try {
- writer = new IndexWriter(IDNEX_PATH, analyzer, true,new IndexWriter.MaxFieldLength(10));
- Document doc = new Document();
- Field field = new Field(FIELD_NAME, "第一条记录", Field.Store.YES,
- Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
- doc.add(field);
- field = new Field(FIELD_CONTENT, "中华人民共和国", Field.Store.YES,
- Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
- doc.add(field);
- writer.addDocument(doc);
- doc = new Document();
- field = new Field(FIELD_NAME, "第二条记录", Field.Store.YES,
- Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
- doc.add(field);
- field = new Field(FIELD_CONTENT, "人民共和国", Field.Store.YES,
- Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
- doc.add(field);
- writer.addDocument(doc);
- writer.close();
- System.out.println("Indexed success!");
- //检索
- IndexReader reader = IndexReader.open(IDNEX_PATH);
- //生成查询条件
- Term term1 = new Term(FIELD_CONTENT,"共");
- Term term2 = new Term(FIELD_CONTENT,"人");
- Term term3 = new Term(FIELD_NAME,"二");
- TermQuery q1 = new TermQuery(term1);
- TermQuery q2 = new TermQuery(term2);
- TermQuery q3 = new TermQuery(term3);
- BooleanQuery booleanQuery = new BooleanQuery();
- booleanQuery.add(q1, BooleanClause.Occur.MUST);
- booleanQuery.add(q2, BooleanClause.Occur.MUST);
- booleanQuery.add(q3, BooleanClause.Occur.MUST_NOT);
- Searcher searcher = new IndexSearcher(reader);
- TopDocs topDocs = searcher.search(booleanQuery,10);
- if (topDocs.totalHits == 0) {
- System.out.println("topDocs.totalHits = 0");
- } else{
- ScoreDoc[] scoreDocs = topDocs.scoreDocs;
- for(int i=0;i<topDocs.totalHits;i++){
- int docId = scoreDocs[i].doc;
- Document document = searcher.doc(docId);
- System.out.println("记录"+i+":"+document.get(FIELD_NAME)+" "+document.get(FIELD_CONTENT));
- }
- }
- reader.close();
- } catch (CorruptIndexException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (LockObtainFailedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
发表评论
-
protobuf-dt插件
2015-03-24 13:16 1416protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 606今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 707闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 16061: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9443Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 5721: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 522转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 770简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 695一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7521: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13651: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 746今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 8371:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 582http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 432Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1123多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11751:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 39241:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 7381: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
在实际编程中,这些概念可以通过BooleanQuery类来实现,通过添加不同的BooleanClause来构造复杂的查询表达式。 另外,课程还涉及了TermRangeQuery,这是一种用于执行范围搜索的查询类型。TermRangeQuery允许用户...
booleanQuery.add(query2, BooleanClause.Occur.MUST); // 另一个AND操作 ``` 以上就是Lucene3.0查询处理的基本原理、模型、流程以及主要查询类型的详细说明。通过这些知识,开发者可以有效地构建和执行复杂的信息...
例如,`new BooleanQuery.Builder().Add(query1, Occur.MUST).Add(query2, Occur.SHOULD).Build()`将创建一个必须包含query1且可以包含query2的查询。 2. **短语查询**:通过`PhraseQuery`,可以查找精确的短语匹配...
在实际应用中,除了这些基本操作,还需要了解其他Lucene组件,如Filter(用于进一步筛选结果)、Sort(用于结果排序)、分词器(如StandardAnalyzer、IKAnalyzer等)以及高级查询构造如BooleanQuery、PhraseQuery、...
3. 查询(Query):用户输入的搜索条件被转换为Lucene理解的查询对象,如TermQuery、BooleanQuery等。 4. 搜索(Searching):使用查询对象在索引中查找匹配的文档,并返回结果集。 5. 排序与评分(Sorting & ...
1. 查询解析:用户输入的查询字符串被解析成Query对象,如TermQuery、BooleanQuery等。 2. 查询扩展:根据查询语句,Lucene可能进行同义词扩展、短语匹配等。 3. 相关性评分:使用TF-IDF、BM25等算法计算文档与查询...
6. Query:代表搜索查询的对象,如TermQuery、BooleanQuery等。 7. Hit/HitCollector:搜索结果的表示,HitCollector用于收集搜索结果。 三、索引与搜索流程 1. 创建索引:首先,创建一个Directory实例,然后使用...
2. **Query**:表示查询表达式,如`TermQuery`对应单个词项,`BooleanQuery`对应布尔组合。 3. **IndexWriter**:用于创建和更新索引,如添加、删除和修改文档。 4. **IndexReader**:用于读取已建立的索引,获取...
在本主题中,我们将深入探讨如何使用Lucene进行创建、删除、修改和组合条件查询,以及如何实现类似MySQL中的LIKE、IN、OR和时间范围条件查询。 首先,**创建索引**是使用Lucene的第一步。创建索引涉及到读取数据源...
组合查询允许将多个查询组合在一起,形成更复杂的查询表达式。 ##### 1.9 查询过滤 查询过滤用于在返回结果之前先进行过滤操作,确保结果集满足特定条件。 #### 三、字符串构造查询 字符串构造查询是一种简单直观...
4. 高级查询:提供布尔组合查询、范围查询、近似查询等多种高级查询方式,如使用`BooleanQuery`、`NumericRangeQuery`等。 5. 排序和评分:可以基于各种因素(如相关性、距离等)对搜索结果进行排序和评分。 6. 分页...
也可以直接创建Query对象,如TermQuery、BooleanQuery等。 2. 执行搜索:使用Searcher对象的search方法,传入Query对象和TopDocs参数,返回匹配的文档集合。 3. 结果排序:Lucene支持多种排序方式,如按相关度、...
6. 查询(Query):表示一个搜索请求,如TermQuery、BooleanQuery等。 7. 搜索器(Searcher):执行查询,返回匹配的文档集合。 8. 排序(Sort):定义搜索结果的排序方式,可以基于评分、字段值等。 总之,Apache ...
在留言项目中,可能支持关键词、布尔组合等多种查询语法。 2. 索引搜索(Index Search):使用Query对象与倒排索引进行匹配,找出包含所有查询词的文档。 3. 排序与评分(Scoring):Lucene使用TF-IDF算法计算文档与...
8. **Query**:表示用户查询的抽象类,有多种子类如TermQuery、BooleanQuery等。 9. **ScoreDoc**:表示搜索结果的评分和文档编号。 10. **Hit**:搜索结果的一个匹配项,包含文档编号、文档得分和文档信息。 **四...
在Lucene 5.3.1版本中,我们可以通过API实现对索引的创建、删除、更新和查询操作,这些是构建高效全文搜索引擎的关键步骤。 ### 创建索引 创建索引是Lucene的第一步,它将文档内容转换为可搜索的结构。这个过程...
- 支持多种查询语法,如TermQuery、BooleanQuery等,提供与SQL类似的查询能力。 5. **Search**: - Query类:各种查询类型的实现,如TermQuery、BooleanQuery等,它们负责在索引中寻找匹配的文档。 - 提供搜索...
一共有2份资料 1> lucene学习笔记 2> 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 ...
2. **Boolean 查询**:结合多个 Term 查询,使用 AND、OR、NOT 等布尔运算符来构造复杂的查询表达式。 3. **Phrase 查询**:用于查找包含特定短语的文档,例如 "information retrieval",它会考虑词语之间的顺序。 ...
2. **构造布尔查询**: 使用`BooleanQuery.Builder`创建一个查询实例,然后添加子查询,每个子查询都是一个`Query`对象,如`TermQuery`或`WildcardQuery`,并指定其对应的布尔运算符。 3. **设置查询权重**: 如果...