lucene-SpanFirstQuery 和SpanNearQuery 跨度查询
1、SpanFirstQuery查询
对出现在一个域中前n个位置的跨度查询。
public void testSpanFirstQuery() throws Exception{
SpanzFirtsQuery sfq=new SpanFirstQuery(brown,2);
assertNoMatches(sfq);//前2个位置的跨度无法匹配
sfq=new SpanFirstQuery(brown,3);
assertOnlyBrownFox(sfq);//前3个位置匹配成功
}
域内容为
the quick brown fox ......
2、彼此相邻的跨度
首先,强调一下PhraseQuery对象,这个对象不属于跨度查询类,但能完成跨度查询功能。
匹配到的文档所包含的项通常是彼此相邻的,考虑到原文档中在查询项之间可能有一些中间项,或为了能查询倒排的项,PhraseQuery设置了slop因子,但是这个slop因子指2个项允许最大间隔距离,不是传统意义上的距离,是按顺序组成给定的短语,所需要移动位置的次数,这表示PhraseQuery是必须按照项在文档中出现的顺序计算跨度的,如quick brown fox为文档,则quick fox2个项的slop为1,quick向后移动一次.而fox quick需要quick向后移动3次,所以slop为3
其次,来看一下SpanQuery的子类SpanTermQuery。
它能跨度查询,并且不一定非要按项在文档中出现的顺序,可以用一个独立的标记表示查询对象必须按顺序,或允许按倒过来的顺序完成匹配。匹配的跨度也不是指移动位置的次数,是指从第一个跨度的起始位置到最后一个跨度的结束位置。
在SpanNearQuery中将SpanTermQuery对象作为SpanQuery对象使用的效果,与使用PharseQuery的效果非常相似。 在SpanNearQuery的构造函数中的第三个参数为inOrder标志,设置这个标志,表示按项在文档中出现的顺序倒过来的顺序。
如:the quick brown fox jumps over the lazy dog这个文档
public void testSpanNearQuery() throws Exception{
SpanQuery[] quick_brown_dog=new SpanQuery[]{quick,brown,dog};
SpanNearQuery snq=new SpanNearQuery(quick_brown_dog,0,true);//按正常顺序,跨度为0,对三个项进行查询
assertNoMatches(snq);//无法匹配
SpanNearQuery snq=new SpanNearQuery(quick_brown_dog,4,true);//按正常顺序,跨度为4,对三个项进行查询
assertNoMatches(snq);//无法匹配
SpanNearQuery snq=new SpanNearQuery(quick_brown_dog,4,true);//按正常顺序,跨度为5,对三个项进行查询
assertOnlyBrownFox(snq);//匹配成功
SpanNearQuery snq=new SpanNearQuery(new SpanQuery[]{lazy,fox},3,false);//按相反顺序,跨度为3,对三个项进行查询
assertOnlyBrownFox(snq);//匹配成功
//下面使用PhraseQuery进行查询,因为是按顺序,所以lazy和fox必须要跨度为5
PhraseQuery pq=new PhraseQuery();
pq.add(new Term("f","lazy"));
pq.add(new Term("f","lazy"));
pq.setslop(4);
assertNoMatches(pq);//跨度4无法匹配
//PharseQuery,slop因子为5
pq.setSlop(5);
assertOnlyBrownFox(pq);
}
lucene-SpanFirstQuery 和SpanNearQuery 跨度查询的更多相关文章
- lucene-SpanQuery跨度查询基础
1.跨度查询SpanQuery5个子类 SpanQuery类型 描述 SpanTermQuery 和其他跨度查询结合 ...
- Elasticsearch Span Query跨度查询
ES基于Lucene开发,因此也继承了Lucene的一些多样化的查询,比如本篇说的Span Query跨度查询,就是基于Lucene中的SpanTermQuery以及其他的Query封装出的DSL,接 ...
- 015-elasticsearch5.4.3【五】-搜索API【四】Joining 多文档查询、GEO查询、moreLikeThisQuery、script脚本查询、span跨度查询
一.Joining 多文档查询 joining query 像Elasticsearch这样的分布式系统中执行完整的SQL样式连接非常昂贵.相反,Elasticsearch提供两种形式的连接,旨在水平 ...
- Lucene提供的条件判断查询
第一.按词条搜索 - TermQuery query = new TermQuery(new Term("name","word1"));hits = sear ...
- Lucene 单域多条件查询
在Lucene 中 BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST表示and,BooleanClause.Occur.MUST_NOT表 ...
- 基于lucene的案例开发:查询语句创建PackQuery
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44656141 http://www.llwjy.com/blogdetail/1 ...
- lucene&solr学习——创建和查询索引(代码篇)
1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...
- lucene&solr学习——创建和查询索引(理论)
1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...
- 一步一步跟我学习lucene(18)---lucene索引时join和查询时join使用演示样例
了解sql的朋友都知道,我们在查询的时候能够採用join查询,即对有一定关联关系的对象进行联合查询来对多维的数据进行整理.这个联合查询的方式挺方便的.跟我们现实生活中的托人找关系类似,我们想要完毕一件 ...
随机推荐
- js刷新页面不回到顶部
今天遇到刷新页面不回到顶部的需求 window.location.reload();方法已经解决了问题,但是ie8不支持,后来采用的是锚点这个方法 window.location = '/plan/g ...
- sql分页比较简单快捷的方法
SELECT TOP 显示数量* FROM 表 WHERE (主键id>(SELECT MAX(主键id) FROM(SELECT TOP 页码数*显示数量 主键id FROM 表 ORDER ...
- Python 跳出多重循环
Python 本身没有“break n” 和“goto” 的语法,这也造成了Python 难以跳出多层(特定层数)循环.下面是几个跳出多层(特定层数)循环的tip. 1.自定义异常 class g ...
- shell笔记-local、export用法
local一般用于局部变量声明,多在在函数内部使用. 1. Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. 2. ...
- 解决网页在手机浏览器打开不停刷新的方案(百度的ua自动转向js问题)
一:发现问题 原有可能是网站内挂了一个百度的ua自动转向js,手机访问的话会被自动转到feiyujd.com,然后又被转到www点feiyujd点com,这样反复死循环.就形成了一直在刷新,网站一闪一 ...
- C++内存申请容易产生的错误
1.起因 前两天用python写了一款工具用来把excel文件转换成json文件,今天给他们用的时候发现在文本下看正常,但是在程序中使用就是会多出一些莫名其妙的字符. 2. 调查 原来主要是我写的工具 ...
- 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。
BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法.我们通常只把他们作为加密的基础.单纯的以上 ...
- mysql无法启动,一直处于启动状态解决【Mac osx 】
最近,遇到一个问题,就是mac 使用homebrew 安装了mysql,今天使用mysql.server start,mysql无法启动了,restart还找不到pid,说明服务并没有启动! 错误如下 ...
- 学习笔记——命令模式Command
命令模式,将具体操作Receiver封在Command中,调用类只需要知道Command即可.
- python字符串中的中文处理
python字符串中的字符串默认并非是unicode,如果在字符创中使用Unicode字符,如中文字符,必须要经过转换, 方式1: text = u"中文" 方式2: text = ...