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个位置匹配成功 } 域内容为…
1.跨度查询SpanQuery5个子类 SpanQuery类型                            描述 SpanTermQuery                和其他跨度查询结合使用,单独使用相当于TermQuery SpanFirstQuery               用来匹配域中的第一个部分内的各个spans SpanNearQuery                用来匹配临近的spans SpanNotQuery                 用来匹配不重叠的…
ES基于Lucene开发,因此也继承了Lucene的一些多样化的查询,比如本篇说的Span Query跨度查询,就是基于Lucene中的SpanTermQuery以及其他的Query封装出的DSL,接下来就看一下这些DSL都如何使用吧! 更多翻译参考:Elasticsearch知识汇总 span_term查询 这个查询如果单独使用,效果跟term查询差不多,但是一般还是用于其他的span查询的子查询. 用法也很简单,只需要指定查询的字段即可: { "span_term" : { &qu…
一.Joining 多文档查询 joining query 像Elasticsearch这样的分布式系统中执行完整的SQL样式连接非常昂贵.相反,Elasticsearch提供两种形式的连接,旨在水平扩展.主要包含以下两种: 嵌套查询 文档可能包含嵌套类型的字段.这些字段用于索引对象数组,其中每个对象都可以作为独立文档查询(使用嵌套查询). 父子查询 父子关系可以存在于单个索引中的两种文档类型之间.has_child查询返回其子文档与指定查询匹配的父文档,而has_parent查询返回其父文档与…
第一.按词条搜索 - TermQuery query = new TermQuery(new Term("name","word1"));hits = searcher.search(query); 这样就可以把 field 为 name 的所有包含 word1 的文档检索出来了. 第二."与或"搜索 - BooleanQuery 它实际是一个组合 query 看看下面的代码: query1 = new TermQuery(new Term(&q…
在Lucene 中 BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST表示and,BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or. 下面给出个例子 ** * 根据信息分类和关键词进行查询 * @param type,资源的类型,其值为news或product * @param searchKey,搜索的关键字 * @return Hits */ publi…
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44656141 http://www.llwjy.com/blogdetail/162e5e70516d7ddfb6df8f77e6b13a2b.html 个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽 -----------------------------------------------------------------------------…
1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 (学习上没必要最新的,因为企业中也不会升级太快) Jdk要求:1.7以上 2.使用的jar包 核心包 其他:  3. 创建索引库 (1) 实现步骤 (程序的编写步骤与之前分析的理论步骤是颠倒过来的) 第一步:创建java工程,并导入jar包 第二步:创建一个indexwriter对象(创建索引) 1.…
1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能. (2) 应用场景 对于数据量大,数据结构不固定的数据可采用全文检索方式搜索,比如百度,Google等搜索引擎,论坛搜索,电商网站站内搜索等. 2. Lucene实现全文检索的流程 下面这张图足以说明索引的流程 (1) 绿色表示索引过程,对要搜索的原…
了解sql的朋友都知道,我们在查询的时候能够採用join查询,即对有一定关联关系的对象进行联合查询来对多维的数据进行整理.这个联合查询的方式挺方便的.跟我们现实生活中的托人找关系类似,我们想要完毕一件事.先找自己的熟人,然后通过熟人在一次找到其它,终于通过这样的手段找到想要联系到的人. 有点类似于"世间万物皆有联系"的感觉. lucene的join包提供了索引时join和查询时join的功能. Index-time join 大意是索引时join提供了查询时join的支持,且Index…
nDocs must be > 0     // 函数search(query,filter,n),其中query是查询条件,filter是过滤器,n查询数量,异常消息意思就是n参数的值必须大于0  TopDocs topDocs = indexSearcher.search(bQuery, null, startNo + pageSize);…
spring-data-Elasticsearch 使用之前,必须先确定版本,elasticsearch 对版本的要求比较高. spring和elasticsearch有两种链接方式,一种是用TCP协议,默认端口是9300,还有一种用http协议. 用到的注解: @Document(indexName = "mytest",type = "mytest") //indexName索引名称,type类别 主键可以使用@Id 注解 import org.springfr…
原网址:http://hi.baidu.com/lszhuhaichao/blog/item/ccffc7cb858f1514bf09e66f.html Lucene3.0之查询处理(1):原理2010-03-06 23:37Lucene3.0之查询处理(1):原理 1. 查询的三种方式 ①     顺序查询:简单,但查询效率低 ②     索引查询:快速,需要基础索引结构支撑 2. 理论模型 ①     布尔模型:基于集合论和布尔代数的一种简单检索模型 ②     向量模型:查询串和文档之间分…
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. Lucene搜索API 图示 3. Lucene搜索代码示例 先在pom.xml里面引入查询分析器模块 <!-- lucene-queryparser 查询分析器模块 --> <dependency> <groupId>org.apache.lucene</groupI…
运用Lucene进行索引,在查询的时候是有条数限制的 public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort); 可以看到第三个参数是int类型,所以返回的条数为int最大值.因为Lucene为索引查询,所以不需要返回全部的数据,根据关键词返回匹配的数据,按照分值排序,int大小的数据足够筛选出匹配的正确数据.在运用Lucene查询的是否不易返回过多条数,这样会影响性能,一般1000条左右就够…
lucene初探, 是为了后面solr做准备的. 如果跳过lucene, 直接去看solr, 估计有点懵. 由于时间的关系, lucene查询方法也有多个, 所以单独出来. 一. 精确查询 /** * 获取 查找对象 * @return * @throws Exception */ private IndexSearcher getSearcher() throws Exception { //1. 创建一个directory对象, 也就是索引库存放的位置 Directory directory…
注意:使用QueryParser查询,关键词是会被分词的,如果不需要分词,可以选择使用Lucene提供的API查询类. Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用Query Parser提供的强大的查询语法解析来构造你想要的查询器.本文章详细的介绍了Lucene的查询语法.通过Java语法分析器把一个查询字符串解析成 Lucene的查询器.在你选择使用Query Parser前,请考虑以下事项: 如果你打算在程序中拼接查询语法串然后再利用Query Parser转换…
Lucene 的四大索引查询  清单1:使用布尔操作符 Java代码      //Test boolean operator blic void testOperator(String indexDirectory) throws Exception{ Directory dir = FSDirectory.getDirectory(indexDirectory,false); IndexSearcher indexSearcher = new IndexSearcher(dir); Stri…
@Test public void indexSearch() throws IOException, ParseException { //Termquery:精确string查询 // Query termQuery = new TermQuery(new Term("id","1")); // doSearch(termQuery); //数值范围查询 // Query rangeQuery = FloatPoint.newRangeQuery("p…
前言 Elasticsearch是一个很火的分布式搜索系统,提供了非常强大而且易用的查询和分析能力,包括全文索引.模糊查询.多条件组合查询.地理位置查询等等,而且具有一定的分析聚合能力.因为其查询场景非常丰富,所以如果泛泛的分析其查询性能是一个非常复杂的事情,而且除了场景之外,还有很多影响因素,包括机型.参数配置.集群规模等等.本文主要是针对几种主要的查询场景,从查询原理的角度分析这个场景下的查询开销,并给出一个大概的性能数字,供大家参考. Lucene查询原理 本节主要是一些Lucene的背景…
一. Lucene索引库查询 对要搜索的信息创建Query查询对象,Lucene会根据Query查询对象生成最终的查询语法,类似关系数据库Sql语法一样Lucene也有自己的查询语法,比如:“name:lucene”表示查询Field的name为“lucene”的文档信息. 可通过两种方法创建查询对象: 1)使用Lucene提供Query子类 2)使用QueryParse解析查询表达式 二. TermQuery TermQuery,通过项查询,TermQuery不使用分析器所以建议匹配不分词的F…
一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档id列表. 二.代码分析 实现代码 /** * Lucene入门 * 查询索引 */ public class QueryIndex { /** * 查询索引 * 第一步:创建一个Directory对象,指定索引库的位置 * 第二步:创建一个IndexReader(索引读取)对象,需要指定Direct…
使用Lucene.Net实现全文检索 目录 一 Lucene.Net概述 二 分词 三 索引 四 搜索 五 实践中的问题 一 Lucene.Net概述 Lucene.Net是一个C#开发的开源全文索引库,其源码包括“核心”与“外围”两部分.外围部分实现辅助功能,而核心部分包括: Lucene.Net.Index 提供索引管理,词组排序. Lucene.Net.Search 提供查询相关功能. Lucene.Net.Store 支持数据存储管理,主要包括I/O操作. Lucene.Net.Util…
SpanQuery按照词在文章中的距离或者查询几个相邻词的查询 SpanQuery包括以下几种: SpanTermQuery:词距查询的基础,结果和TermQuery相似,只不过是增加了查询结果中单词的距离信息. SpanFirstQuery:在指定距离可以找到第一个单词的查询. SpanNearQuery:查询的几个语句之间保持者一定的距离. SpanOrQuery:同时查询几个词句查询. SpanNotQuery:从一个词距查询结果中,去除一个词距查询. 下面一个简单例子介绍 package…
"Lucene中的 Query对象": 检 索前,需要对检索字符串进行分析,这是由queryparser来完成的.为了保证查询的正确性,最好用创建索引文件时同样的分析器. queryparser解析字符串时,可以指定查询域,实际可以在字符串中指定一个或多个域.例如:“info:电视台 and id:3329”,“info:电视台”,“电视台”,假如不指定默认域,就会在默认域查询. queryparser调用静态方法parse后会返回query的实例,原子查询.例如:“info:电视台…
/** * 系统环境: vm12 下的centos 7.2 * 当前安装版本: elasticsearch-2.4.0.tar.gz */ QueryBuilder 是es中提供的一个查询接口, 可以对其进行参数设置来进行查用擦还训 package com.wenbronk.javaes; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Iterator; import java.ut…
Query是一个接口,它有很多实现类. QueryParser是Query解析器,用于将一个字符串解析为一个Query对象,这个Query对象可能属于TermQuery,也可能属于PhraseQuery.TermQuery.BooleanQuery等.可以通过Query对象的getClass()方法来查看这个对象到底是哪个实现类. Lucene已经给我们提供了很多Query查询器,如PhraseQuery,SpanQuery那为什么还要提供QueryParser呢?或者说设计QueryParse…
Lucene 在了解Lucene之前,我们先了解下全文数据查询. 全文数据查询 我们的数据一般分为两种:结构化数据和非结构化数据 结构化数据:有固定格式或有限长度的数据,如数据库中的数据.元数据 非结构化数据:又叫全文数据,指不定长或无固定格式的数据,如邮件.word文档 数据库适合结构化数据的精确查询,而不适合半结构化.非结构化数据的模糊查询及灵活搜索(特别是数据量大时),无法提供想要的实时性. 全文数据查询 顺序扫描法 所谓顺序扫描,就是要找内容包含一个字符串的文件,就是一个文档一个文档的看…
所谓PhraseQuery,就是通过短语来检索,比如我想查"big car"这个短语,那么如果待匹配的document的指定项里包含了"big car"这个短语,这个document就算匹配成功.可如果待匹配的句子里包含的是"big black car",那么就无法匹配成功了,如果也想让这个匹配,就需要设定slop,先给出slop的概念:slop是指两个项的位置之间允许的最大间隔距离,下面我举例来解释: 我的待匹配的句子是:the quick b…
转自:http://www.open-open.com/lib/view/open1348033848724.html Lucene的分析过程 回顾倒排索引的构建 收集待建索引的原文档(Document) 将原文档传给词条化工具(Tokenizer)进行文本词条化 将第二步得到的词条(Token)传给语言分析工具(Linguistic modules)进行语言学预处理,得到词项(Term) 将得到的词项(Term)传给索引组件(Indexer),建立倒排索引 注:详细文档->倒排索引的理论过程见…