lucene-SpanQuery跨度查询基础
1、跨度查询SpanQuery5个子类
SpanQuery类型 描述
SpanTermQuery 和其他跨度查询结合使用,单独使用相当于TermQuery
SpanFirstQuery 用来匹配域中的第一个部分内的各个spans
SpanNearQuery 用来匹配临近的spans
SpanNotQuery 用来匹配不重叠的spans
SpanOrQuery span查询的聚合匹配
2、测试SpanQuery
public class SpanQueryTest extends TestCase{
private RAMDirectory directory;
private IndexSearcher searcher;
private IndexReader reader;
private SpanTermQuery quick;
private SpanTermQuery brown;
private SpanTermQuery red;
private SpanTermQuery fox;
private SpanTermQuery lazy;
private SpanTermQuery Sleepy;
private SpanTermQuery dog;
private SpanTermQuery cat;
private Analyzer analyzer;
protected void setUp() throws Exception{
directory=new RAMDirectory();
analyzer=new WhitespaceAnalyzer();
IndexWriter writer=new IndexWriter(directory,analyzer,true);
Document doc=new Document();
doc.add(Field.Text("f","the quck brown fox jumps over the lazy dog"));
writer.addDocument(doc);
doc=new Document();
doc.add(Field.Text("f","the quick red fox jumps over the sleepy cat"));
writer.addDocument(doc);
writer.close();
searcher=nwe IndexSearcher(directory);
reader=IndexReader.open(directory);
quick=new SpanTermQuery(new Term("f","quick"));
brown=new SpanTermQuery(new Term("f","brown"));
red=new SpanTermQuery(new Term("f","red"));
fox=new SpanTermQuery(new Term("f","fox"));
lazy=new SpanTermQuery(new Term("f","lazy"));
sleepy=new SpanTermQuery(new Term("f","dog"));
dog=new SpanTermQuery(new Term("f","cat"));
}
private void assertOnlyBrownFox(Query query) throws Exception{//检查是否返回一个匹配结果
Hits hits=searcher.search(query);
assertEquals(1,hits.length());
assertEquals("wrong doc",0,hits.id(0));
}
private void assertBothFoxes(Query query) throws Exception{//检查是否返回2个匹配结果
Hits hits=searcher.search(query);
assertEquals(2.hits.length());
}
private void assertNotMatch(Query query) throws Exception{
Hits hits=searcher.search(query);
assertEquals(0,hits.length());
}
}
3、使用SpanTermQuery类,它匹配文档的方式与TermQuery相似,但是它会记录一个文档中的相同项在文档中出现的不同位置。
SpanQuery对象一直跟踪它所匹配的结果:对于每个正进行匹配的文档,它记录下被匹配的查询文本的所有起点和终点位置(以语汇单元为一个位置)。
dumpSpans(new SpanTermQuery(new Term("f","the")));//查询文本为the,带the的所有文档,并显示查询细节
定义一个方法dumpSpans()调用SpanQuery的一些底层API为我们查询细节。
public void dumpSpans(SpanQuery query) throws IOException{
Spans spans=query.getSpans(reader);
System.out.println(query+":");
int numSpans=0;
Hits hits=searcher.search(query);
Float[] scores=new float[2];
for (int i0;i<hits.length();i++){
scores[hits.id(i)]=hits.score(i);
}
while (spans.next()){//spans里是单个查询文本匹配情况情况,记录着query在文档中的位置,
//next表示query在文档中的下一个位置,以及查询文本所在的文档号
numSpans++;
int id=spans.doc();
Document doc=reader.document(id);
Token[] tokens=AnaylzerUtilts.tokensFromAnalysis(analyzer,doc.get("f"));
StringBuffer buffer=new StringBuffer();
buffer.append(" ");
for (int i=0;i<tokens.length;i++){
if (i==spans.start()){
buffer.append("<");
}
buffer.append(tokens[i].termText());
if (i+1==spans.end()){
buffer.append(">");
}
buffer.append(" ");
}
buffer.append("("+scores[id]+")");
System.out.println(buffer);//输出spans的查询文本的在文档中本次出现的信息。
}
if (numspans==0){
System.out.println(" no spans");//没有任何匹配
}
System.out.println();
}
第1次spans.next循环所输出:<the> quick brown fox jumps over the lazy dog(0.18123456)
第2次spans.next循环所输出:the quick brown fox jumps over <the> lazy dog(0.18123456)
第3次spans.next循环所输出:<the> quick red fox jumps over the sleep dog(0.18123456)
第4次spans.next循环所输出:the quick red fox jumps over <the> sleep dog(0.18123456)
转载于:https://www.cnblogs.com/1130136248wlxk/p/5031097.html
lucene-SpanQuery跨度查询基础相关推荐
- 【Elasticsearch】Elasticsearch Span Query跨度查询
1.概述 转载:Elasticsearch Span Query跨度查询 ES基于Lucene开发,因此也继承了Lucene的一些多样化的查询,比如本篇说的Span Query跨度查询,就是基于Luc ...
- Lucene mysql app查询_集成Lucene,查询相关数据
应用场景:有一大部分固定的数据,短期内不会改变的,之前是直接走mysql,然后搜索时为了用到索引,走了前缀匹配,然后其他的一些固定查询在中间设置了一层缓存,但是想想直接这样部署到线上的话,这一类的根据 ...
- 4、oracle数据库的查询基础
ORACLE查询基础 介绍oracle下数据的查询时用到的一些运算符.关键字和函数. 1.运算符 在进行数据查询时,有的时候不只是查询字段值,还需要做一些数据处理的操作,这时候就用到了运算符 -- 算 ...
- mongodb模糊查询_我叫Mongo,收了「查询基础篇」,值得你拥有
这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...
- SQL基础——查询基础
查询基础 前言 整体思维导图 列的查询 语法2.1 基本的SELECT语句 代码示例:从Product表中输出3列 执行结果 查询出所有的列 语法2.2 查询全部的列 代码示例2.2 输出Produc ...
- Hive SQL数据查询基础
教材第四章Hive SQL数据查询基础实验 提示:如果感觉sogou.500w.utf8文件太大,执行hive命令太耗时间,可以执行以下命令,截取前1万行数据,生成一个新的数据文件sogou.1w.u ...
- MySQL单表查询基础卷(A)
MySQL单表查询基础卷(A) 第一章 数据准备 第二章 数据展示 第三章 题目说明 第四章 参考答案 第一章 数据准备 -- 创建数据库,指定字符集 utf8 CREATE DATABASE IF ...
- 大数据HiveSQL学习笔记三-查询基础语法以及常用函数
大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...
- MICK-SQL基础教程(第二版)第二章 查询基础
第二章 查询基础 SELECT语句基础 列的查询 SELECT <列名>,-- FROM <表名>: 查询出表中所有的列 SELECT * FROM <表名>; 为 ...
- 第6篇:SELECT查询基础篇
第6篇:SELECT查询基础篇 DQL(Data QueryLanguage):数据查询语言,从数据库中获取数据的,按照DQL的语法给数据库发送一条指令,数据库按照需要返回数据 查询常量 SELECT ...
最新文章
- js中的各种宽高以及位置总结
- ExecuteNonQuery() 返回值
- 题目1112:拦截导弹
- base64编码 springboot_Spring Boot 中如何实现 HTTP 认证?
- Rational Rose正逆向工程(类图转Java代码,Java代码转类图)
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 为什么使用数据库从库
- 开源软件 | 深度学习用于道路病害检测
- MAC OS安装Composer + Laravel
- 奥迪坚受邀参加银联数据2016年度客服云平台专题研讨会
- 传统IT架构下面临的挑战?
- AcWing 658. 一元二次方程公式
- maya表情blendshape_【UE4】人物角色MorphTarget(Blendshape) 面部表情制作方案
- Python Prep随想练习-Day3
- 什么是镜像?什么是虚拟光驱?
- 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 2021年软考信息安全工程师下午真题(考生回忆版)
- photoshop第十五章:制作商业卡片场景效果
- idea自动生成bean实体对象
- 职工考勤管理MySQL课程设计_考勤管理系统数据库课程设计.doc
热门文章
- 细说ASP.NET Cache及其高级用法
- python项目练手(一)------飞船大战游戏
- java 构建_Java入门环境构建
- mysql查询周边商铺_利用Redis的Geo功能实现查找附近的店铺
- 和baby的区别_姜涛状告白衣山猫?小伊伊有剧本?惟Baby整容?阿彩照骗?De劈腿?...
- java ftpclient quit_一步一步android(6):关于FtpClient类的学习
- python数据增强代码_基于Python的图像数据增强Data Augmentation解析
- python实验总结心得体会_如何更有效地“肝”论文?这里有份最全工具总结
- python3.7.2怎么用不了pillow_python怎么加载Pillow包
- 计算机二级关系模式知识点,2013年计算机二级VFP关系模式知识点详解