- 浏览: 572856 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1378protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 567今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 678闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 15471: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9408Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 5371: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 496转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 735简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 662一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7171: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13391: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 717今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 8021:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 555http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 404Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1099多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11471:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 38861:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 6991: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
一共有2份资料 1> lucene学习笔记 2> 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 ...
Lucene创建索引,查询索引的简单使用。
2) Query: 查询对象。把用户输入的查询字符串封装成Lucene能够识别的Query对象。 3) Filter: 用来过虑搜索结果的对象。 4) TopDocs: 代表查询结果集信息对象。它有两个属性: a) totalHits: 查询命中数。 b) ...
(5) 多条件查询(BooleanQuery) 12 (6) 短语查询(PhraseQuery) 12 (7) 模糊查询(FuzzyQuery) 12 3.3 QueryParser 13 (1) 创建QueryParser 13 (2) 各种匹配方式 13 3.4 分页搜索 14 (1) 普通分页 14 (2) search...
信息检索 使用Lucene实现一个IR系统 功能: 索引:1.创建索引 2.delete index ...3.booleanQuery 4.prefixQuery 5.phraseQuery 6.multiPhraseQuery 7.regexpQuery 8.fuzzyQuery 9.queryparser 10.sort 11.filter
提供了索引搜索器IndexSearcher类和各种Query类,如TermQuery、BooleanQuery等。 6) queryParser模块:负责查询语句的语法分析。提供了解析查询语句的QueryParser类 7) util模块:包含一些公共工具类。 5. 创建...
支持许多强大的查询类型,比如 PhraseQuery、WildcardQuery、RangeQuery、FuzzyQuery、BooleanQuery 等。 支持解析人们输入的丰富查询表达式。 允许用户使用定制排序、过滤和查询表达式解析扩展搜索行为。 使用基于...
@Test ... BooleanQuery booleanQuery = new BooleanQuery(); Query query1 = new TermQuery(new Term("fileName","apache")); Query query2 = new TermQuery(new Term("fileName","lucene"));
特详细易懂的《Elasticsearch入门讲解》,包含Elasticsearch使用场景、数据类型、数据映射、BooleanQuery、聚合查询等内容的讲解。是我根据自己的理解,转化为通熟易懂的话,来呈现给大家。
Lucene7.4检索和打分过程的源代码阅读思路,这里只针对用BooleanQuery作为Query,从IndexSearch说起,从检索到打分的过程,还加入了自己的无关的一些想法,忽略即可。
如常见的TermQuery就是将一个简单的关键字进行封装后的对象,类似的还有BooleanQuery,即布尔型的查找。 IndexSearcher对象的search方法中总是需要一个Query对象(或是Query子类的对象),本节就来介绍各种Query类...