- 浏览: 274543 次
- 性别:
- 来自: 湖南岳阳
最新评论
-
ternus:
兄弟,我用boboBrowse 也遇到了排序的问题,上线了讨论 ...
lucene 分组 bobo-Browse 排序的问题 -
luli0822:
Awesome bookmarks of those guru ...
流行的jQuery信息提示插件(jQuery Tooltip Plugin) -
shenbai:
如果你要在前台运行,你应该run得是ElasticSearch ...
ElasticSearch 源码分析 环境入门 -
cl1154781231:
<s:peroperty value="#at ...
关于Struts2中标签的一些心得 -
RonQi:
转载的吗?http://blog.csdn.net/stray ...
利用bobo-browse 实现lucene的分组统计功能
关于范围查询RangeQuery。
RangeQuery是由两个词条作为上界和下界进行查询,同时指定了一个Boolean型参数,表示是否包括边界,这可以从
RangeQuery的构造方法看到:
public RangeQuery(Term lowerTerm, Term upperTerm, boolean inclusive)
{
if (lowerTerm == null && upperTerm == null)
{
throw new IllegalArgumentException("At least one term must be non-null");
}
if (lowerTerm != null && upperTerm != null && lowerTerm.field() != upperTerm.field())
{
throw new IllegalArgumentException("Both terms must be for the same field");
}
// if we have a lowerTerm, start there. otherwise, start at beginning
if (lowerTerm != null) {
this.lowerTerm = lowerTerm;
}
else {
this.lowerTerm = new Term(upperTerm.field(), "");
}
this.upperTerm = upperTerm;
this.inclusive = inclusive;
}
在构造一个RangeQuery的时候,不能使Term lowerTerm和Term upperTerm都为null,因为这样构造没有意义的。使用RangeQuery对于时间、数字序号等类似特征的词条具有很好的效果,但是作为普通词条意义不大,它会按照字母序来确定搜索范围。
可以指定Term lowerTerm和Term upperTerm中的一个为null,如果指定了Term upperTerm为null,会以Term lowerTerm为上界(即>=),同理,如果Term lowerTerm为null,会以Term upperTerm作为下界(即<=)。
依然使用文章 Lucene-2.2.0 源代码阅读学习(32) 使用的索引文件,建立测试文件,代码如下所示:
package org.apache.lucene.shirdrn.main;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.RangeQuery;
import org.apache.lucene.search.spans.SpanNearQuery;
import org.apache.lucene.search.spans.SpanQuery;
public class RangeQuerySearcher {
public static void main(String[] args) {
String indexPath = "E:\\Lucene\\index";
try {
IndexSearcher searcher = new IndexSearcher(indexPath);
String keywordA = "这些";
Term termA = new Term("contents",keywordA);
String keywordB = "辩论";
Term termB = new Term("contents",keywordB);
RangeQuery rangeQuery = new RangeQuery(termA,termA,true);
Date startTime = new Date();
Hits hits = searcher.search(rangeQuery);
for(int i=0;i<hits.length();i++){
System.out.println("Document的内部编号为 : "+hits.id(i));
Document doc = hits.doc(i);
System.out.println("Document的得分为 : "+hits.score(i));
List fieldList = doc.getFields();
System.out.println("Document(编号) "+hits.id(i)+" 的Field的信息: ");
for(int j=0;j<fieldList.size();j++){
Field field = (Field)fieldList.get(j);
System.out.println(" Field的name : "+field.name());
System.out.println(" Field的stringValue : "+field.stringValue());
System.out.println(" ------------------------------------");
}
}
System.out.println("********************************************************************");
Date finishTime = new Date();
long timeOfSearch = finishTime.getTime() - startTime.getTime();
System.out.println("本次搜索所用的时间为 "+timeOfSearch+" ms");
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
看上面构造RangeQuery的时候,使用的是同一个Term作为上界和下界,而且inclusive指定为true,这时其实检索的就是termA,结果如下所示:
Document的内部编号为 : 1
Document的得分为 : 0.35136628
Document(编号) 1 的Field的信息:
Field的name : contents
Field的stringValue : 谁知道宇宙空间的奥秘,在我们这些人当中?
------------------------------------
Field的name : contents
Field的stringValue : 宇宙飞船。
------------------------------------
Field的name : contents
Field的stringValue : 我们的太空宇宙。
------------------------------------
********************************************************************
本次搜索所用的时间为 93 ms
含有词条“这些”的Document只有编号为1的满足条件。如果上面程序中inclusive指定为false,表示检索的termA作为上界和下界的开区间,很容易想到,检索的检索一定是空集。
如果修改RangeQuery的构造如下:
RangeQuery rangeQuery = new RangeQuery(termA,termB,false );
查询结果还是空集,要知道:“这些”在字母排序时要在“辩论”之后,而且取的是开区间。
如果修改为:
RangeQuery rangeQuery = new RangeQuery(termA,termB,true );
则只是对两个边界进行检索,结果可能会存在,我的测试结果如下所示:
Document的内部编号为 : 1
Document的得分为 : 0.35136628
Document(编号) 1 的Field的信息:
Field的name : contents
Field的stringValue : 谁知道宇宙空间的奥秘,在我们这些人当中?
------------------------------------
Field的name : contents
Field的stringValue : 宇宙飞船。
------------------------------------
Field的name : contents
Field的stringValue : 我们的太空宇宙。
------------------------------------
********************************************************************
本次搜索所用的时间为 93 ms
发表评论
-
全文检索的基本原理
2010-02-25 10:22 835一、总论 根据http://lucene.apache.or ... -
lucene 分组 bobo-Browse 排序的问题
2010-02-01 16:18 2123今天碰到了一个问题,用bobo分组后对价格升序 居然100 ... -
开源搜索引擎
2010-02-01 14:31 1630开放源代码搜索引擎为 ... -
lucene中的filter器群组及其缓存大盘点
2010-01-20 23:18 1137lucene中的filter其实并不起眼,大家对其对性能的影响 ... -
利用bobo-browse 实现lucene的分组统计功能
2010-01-18 17:50 2860bobo-browse 是一用java写的lucene扩展组件 ... -
lucene Field部分参数设置含义
2009-11-07 17:51 1201<script type="text/ja ... -
刚下载,开始学习lucene时看的文章
2009-09-04 18:43 1313Lucene 2.0.0下载安装及测试 【下载】 下载链接 ... -
Lucene-2.3.1 阅读学习(42)
2009-09-04 18:42 831关于Hits类。 这个Hits类 ... -
Lucene 2.3.1 阅读学习(41)
2009-09-04 18:42 1329当执行Hits htis = search(query);这一 ... -
Lucene-2.3.1 源代码阅读学习(40)
2009-09-04 18:41 882关于Lucene检索结果的排序问题。 已经知道,Lucene ... -
Lucene-2.3.1 源代码阅读学习(39)
2009-09-04 18:41 1115关于Lucene得分的计算。 在IndexSearcher类 ... -
Lucene-2.3.1 源代码阅读学习(39)
2009-09-04 18:38 516关于Lucene得分的计算。 在IndexSearcher类 ... -
Lucene-2.3.1 源代码阅读学习(38)
2009-09-04 18:38 842关于QueryParser。 QueryParser是用来解 ... -
Lucene-2.3.1 源代码阅读学习(37)
2009-09-04 18:37 581关于MultiTermQuery查询。 这里研究继承自Mul ... -
Lucene-2.3.1 源代码阅读学习(36)
2009-09-04 18:37 730关于MultiTermQuery查询。 ... -
Lucene-2.3.1 源代码阅读学习(35)
2009-09-04 18:36 768关于MultiPhraseQuery(多短语查询)。 Mul ... -
Lucene-2.3.1 源代码阅读学习(34)
2009-09-04 18:36 602关于PhraseQuery。 PhraseQuery查询是将 ... -
Lucene-2.3.1 源代码阅读学习(32)
2009-09-04 18:35 1089关于SpanQuery(跨度搜索),它是Query的子类,但是 ... -
Lucene-2.3.1 源代码阅读学习(31)
2009-09-04 18:34 783关于前缀查询PrefixQuery(前缀查询)。 准备工作就 ... -
Lucene-2.3.1 源代码阅读学习(30)
2009-09-04 18:34 979关于Query的学习。 主要使用TermQuery和Bool ...
相关推荐
Lucene-2.3.1 源代码阅读学习
lucene-2.3.1.jar.7z
lucene-core-2.3.1.jar
赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-analyzers-smartcn-7.7.0.pom; 包含翻译后的API文档:lucene-analyzers-smartcn-7.7.0-javadoc-API文档-中文(简体)版....
一个开源的搜索引擎 lucene-4.8.0源代码,比较全
赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene-core-7.7.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene...
lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0
lucene 5.3.1源代码,可用来实现全文检索,源自官网。
赠送源代码:lucene-analyzers-common-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-analyzers-common-6.6.0.pom; 包含翻译后的API文档:lucene-analyzers-common-6.6.0-javadoc-API文档-中文(简体)版.zip;...
赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene-core-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene...
赠送源代码:lucene-suggest-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-6.6.0.pom; 包含翻译后的API文档:lucene-suggest-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache....
赠送源代码:lucene-backward-codecs-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-backward-codecs-7.3.1.pom; 包含翻译后的API文档:lucene-backward-codecs-7.3.1-javadoc-API文档-中文(简体)-英语-对照...
赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene-core-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene...
赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-analyzers-smartcn-7.7.0.pom; 包含翻译后的API文档:lucene-analyzers-smartcn-7.7.0-javadoc-API文档-中文(简体)-英语...
赠送源代码:lucene-spatial-extras-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras-7.3.1.pom; 包含翻译后的API文档:lucene-spatial-extras-7.3.1-javadoc-API文档-中文(简体)-英语-对照版....
赠送源代码:lucene-memory-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-memory-6.6.0.pom; 包含翻译后的API文档:lucene-memory-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:...
赠送源代码:lucene-suggest-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-7.7.0.pom; 包含翻译后的API文档:lucene-suggest-7.7.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache....
赠送源代码:lucene-spatial-extras-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras-7.2.1.pom; 包含翻译后的API文档:lucene-spatial-extras-7.2.1-javadoc-API文档-中文(简体)-英语-对照版....
赠送源代码:lucene-sandbox-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-sandbox-7.2.1.pom; 包含翻译后的API文档:lucene-sandbox-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache....
赠送源代码:lucene-spatial-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-6.6.0.pom; 包含翻译后的API文档:lucene-spatial-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache....