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跨度查询基础相关推荐

  1. 【Elasticsearch】Elasticsearch Span Query跨度查询

    1.概述 转载:Elasticsearch Span Query跨度查询 ES基于Lucene开发,因此也继承了Lucene的一些多样化的查询,比如本篇说的Span Query跨度查询,就是基于Luc ...

  2. Lucene mysql app查询_集成Lucene,查询相关数据

    应用场景:有一大部分固定的数据,短期内不会改变的,之前是直接走mysql,然后搜索时为了用到索引,走了前缀匹配,然后其他的一些固定查询在中间设置了一层缓存,但是想想直接这样部署到线上的话,这一类的根据 ...

  3. 4、oracle数据库的查询基础

    ORACLE查询基础 介绍oracle下数据的查询时用到的一些运算符.关键字和函数. 1.运算符 在进行数据查询时,有的时候不只是查询字段值,还需要做一些数据处理的操作,这时候就用到了运算符 -- 算 ...

  4. mongodb模糊查询_我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...

  5. SQL基础——查询基础

    查询基础 前言 整体思维导图 列的查询 语法2.1 基本的SELECT语句 代码示例:从Product表中输出3列 执行结果 查询出所有的列 语法2.2 查询全部的列 代码示例2.2 输出Produc ...

  6. Hive SQL数据查询基础

    教材第四章Hive SQL数据查询基础实验 提示:如果感觉sogou.500w.utf8文件太大,执行hive命令太耗时间,可以执行以下命令,截取前1万行数据,生成一个新的数据文件sogou.1w.u ...

  7. MySQL单表查询基础卷(A)

    MySQL单表查询基础卷(A) 第一章 数据准备 第二章 数据展示 第三章 题目说明 第四章 参考答案 第一章 数据准备 -- 创建数据库,指定字符集 utf8 CREATE DATABASE IF ...

  8. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  9. MICK-SQL基础教程(第二版)第二章 查询基础

    第二章 查询基础 SELECT语句基础 列的查询 SELECT <列名>,-- FROM <表名>: 查询出表中所有的列 SELECT * FROM <表名>; 为 ...

  10. 第6篇:SELECT查询基础篇

    第6篇:SELECT查询基础篇 DQL(Data QueryLanguage):数据查询语言,从数据库中获取数据的,按照DQL的语法给数据库发送一条指令,数据库按照需要返回数据 查询常量 SELECT ...

最新文章

  1. js中的各种宽高以及位置总结
  2. ExecuteNonQuery() 返回值
  3. 题目1112:拦截导弹
  4. base64编码 springboot_Spring Boot 中如何实现 HTTP 认证?
  5. Rational Rose正逆向工程(类图转Java代码,Java代码转类图)
  6. 剑指offer 调整数组顺序使奇数位于偶数前面
  7. 为什么使用数据库从库
  8. 开源软件 | 深度学习用于道路病害检测
  9. MAC OS安装Composer + Laravel
  10. 奥迪坚受邀参加银联数据2016年度客服云平台专题研讨会
  11. 传统IT架构下面临的挑战?
  12. AcWing 658. 一元二次方程公式
  13. maya表情blendshape_【UE4】人物角色MorphTarget(Blendshape) 面部表情制作方案
  14. Python Prep随想练习-Day3
  15. 什么是镜像?什么是虚拟光驱?
  16. 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署
  17. 2021年软考信息安全工程师下午真题(考生回忆版)
  18. photoshop第十五章:制作商业卡片场景效果
  19. idea自动生成bean实体对象
  20. 职工考勤管理MySQL课程设计_考勤管理系统数据库课程设计.doc

热门文章

  1. 细说ASP.NET Cache及其高级用法
  2. python项目练手(一)------飞船大战游戏
  3. java 构建_Java入门环境构建
  4. mysql查询周边商铺_利用Redis的Geo功能实现查找附近的店铺
  5. 和baby的区别_姜涛状告白衣山猫?小伊伊有剧本?惟Baby整容?阿彩照骗?De劈腿?...
  6. java ftpclient quit_一步一步android(6):关于FtpClient类的学习
  7. python数据增强代码_基于Python的图像数据增强Data Augmentation解析
  8. python实验总结心得体会_如何更有效地“肝”论文?这里有份最全工具总结
  9. python3.7.2怎么用不了pillow_python怎么加载Pillow包
  10. 计算机二级关系模式知识点,2013年计算机二级VFP关系模式知识点详解