- 浏览: 150685 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (69)
- Maven (1)
- lucene (22)
- bobo zoie (6)
- eclipse (5)
- Nexus (1)
- Git (1)
- trac (1)
- RMI (2)
- svn (0)
- Protocol buffer (0)
- sensei (6)
- JMX (2)
- Faceted search (1)
- Linux (1)
- Cassandra (1)
- Zookeeper (3)
- zoie (1)
- jmap (1)
- mongodb (2)
- 百度百科 (2)
- 词库 (2)
- 抓取 (2)
- IndexTank (1)
- LinkedIn (4)
- norbert (3)
- 分布式 (2)
- senseidb (2)
- Thrift (1)
- scala (1)
- 搜索引擎 (1)
- 质量 (1)
- Nosql (1)
- Jaccard (1)
- Mahout (1)
最新评论
-
bluky999:
@Mark
怎样量化评价搜索引擎的结果质量 -
baso4233:
非常感谢,我跑通了。途中出现了,java.lang.Unsup ...
norbert 高并发分布式服务例子 examples (二) -
yangsong158:
rabbit9898 写道xiansuanla 写道我运行 m ...
JMX 入门例子 -
rabbit9898:
xiansuanla 写道我运行 main方法以后 cmd 里 ...
JMX 入门例子 -
xiansuanla:
我运行 main方法以后 cmd 里面运行 jconsole ...
JMX 入门例子
英文原文地址:http://lucene.apache.org/java/2_4_0/queryparsersyntax.html
源:
Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用 Query Parser提供的强大的查询语法解析来构造你想要的查询器。本文章详细的介绍了Lucene的查询语法。通过Java语法分析器把一个查询字符串解析成 Lucene的查询器。在你选择使用Query Parser前,请考虑以下事项:
如果你打算在程序中拼接查询语法串然后再利用Query Parser转换,那么强烈建议你利用相应的API来自己构造查询器。也就是说,Query Parser是为手工输入高级查询设计的,而不是为程序拼接语法串而设计的。 不分词的字段也最好通过相应的API添加到查询器中,而不是通过Query Parser。Query Parser 使用的Analyser分析器,作用是将用户手工输入的文本转化为相应的Term。如果一个字段的值是通过程序生成的(例如日期字段,关键词字段等),那 么在查询的时候也应该保持前后一致,利用程序生成相应的格式来查询。
在查询的目标中,如果字段全部是程序生成的文本,(例如补齐的日期字段等),最好使用Query Parser以便查询的时候也是一致的格式。至于其它的,例如日期范围查询,关键字查询等,最好调用相应的API来构建查询器。目标字段中如果仅仅拥有有 限的枚举值时,最好通过下拉列表提供给用户选择,然后利用TermQuery添加到查询器中,而不是而其拼接到查询字符串然后利用Query Parser来解析。
Terms
一个查询将分解为若干Term以及操作符,有两种Term,其一是单一Term,其二为短语。单一Term是经过分析器分词后的最小单元,他就是一个简单 的词,例如“Test”和“Hello”。短语则是一组被双引号括起来的一组词,例如:“Hello dolly”,多个Term可以通过布尔操作合并在一个更加复杂的查询器中。
注意:一般来说,创建索引的分析器和查询的分析器最好保持一致(当然也有特殊情况,比如单字索引,分词组合查询),所以选择一个不会干扰查询词的分析器是很重要的。
Fields
Lucene支持多字段数据,当你在查询的时候你可以指定一个字段查询,也可以使用默认的字段。你可以使用 字段名 + “:” + 查询词来指定字段名搜索。举个例子,让我们假定Lucene的索引中含有两个字段,Title字段和Text字段,其中Text字段是默认字段,当你想找 到一篇文档其中标题包含“The Right Way”同时文本中包含“go”,你可以输入:
或者:
title:" The Right Way " AND go
如果字段是默认字段的话,在查询语法中可以不需要显式指定。注意,使用默认字段有可能会造成如下的结果:
title:Do it right
以上查询将查找标题中含有“Do”,Text字段字段中含有“it”和“right”的文档,因为Text是默认字段,所以如果想要查找Title中完整包含的很用引号引起来。
二、模糊查询
Term Modifiers
Lucene支持在Term中使用通配符来支持模糊查询。
Wildcard Searches [类:org.apache.lucene.search.WildcardQuery]
Lucene支持单个或者多个字符的通配符查询,匹配单一字符使用符号“?”,匹配多个字符使用符号“*”。
“?”通配符将查找所有满足通过一个字符替换后符合条件的文档。比如:搜索“test”和“text”你可以使用:
te?t
“*”通配符将查询0个或者多个字符替换后符合条件的。举例来说,查询test,tests或者tester,你可以使用一下字符串来搜索:
test*
当然,你也可以将“*”放在字符的中间
te*t
注意:你不能将“*”和“?”放在第一个字符来查询。(Lucene应该是出于性能考虑,所以不支持该功能)
Fuzzy Searches [org.apache.lucene.search.FuzzyQuery]
Lucene支持基于编辑距离算法的模糊搜索,你可以使用波浪符号“~”放在查询词的后面,比如搜索一个与“roam”拼写相近的词可以使用:
roam~
该查询将寻找类似“foam”和“roams”等的词语。也可以说是相似度查询。
Proximity Searches [org.apache.lucene.search.PrefixQuery]
Lucene支持指定距离查询,你可以使用波浪号“~”加数字在查询词后。举例来说搜索“apache”和“jakarta”距离10个字符以内,你可以使用如下语法:
"jakarta apache"~10
通过这个语法支持,我们可以单字索引,分词查询,分词完后,满足每个词的单字必须间距为1。这样可以保证100%的召回率,但是在索引方面将造成索引臃肿,同时查询速度也将在某程度上降低,一般来说,在150W文章数据到200W数据的时候性能将会明显的降低。
Range Searches [org.apache.lucene.search.RangeQuery]
范围查询允许你指定某个字段最大值和最小值,查询在二者之间的所有文档。范围查询可以包含或者不包含最大值和最小值,排序是按照字典顺序来排序的。
mod_date:[20020101 TO 20030101]
这个将查找满足mode_date字段在大于等于20020101,小于等于20030101范围的所有文档,注意:范围查询并不是为日期字段专设的,你也可以对非日期字段进行范围查询。
title:{Aida TO Carmen}
这个将查找所有标题在Aida和Carmen之间但不包含Aida和Carmen的文档。包含最大值和最小值的查询使用方括号,排除则使用花括号。
三、优先级
Boosting a Term
Lucene支持给不同的查询词设置不同的权重。设置权重使用“^”符号,将“^”放于查询词的尾部,同时跟上权重值,权重因子越大,该词越重要。设置权重允许你通过给不同的查询词设置不同的权重来影响文档的相关性,假如你在搜索:
jakarta apache
如果你认为“jakarta”在查询时中更加重要,你可以使用如下语法:
jakarta^4 apache
这将使含有Jakarta的文档具有更高的相关性,同样你也可以给短语设置权重如下:
"jakarta apache"^4 "jakarta lucene"
在默认情况下,权重因子为1,当然权重因子也可以小于1。
四、Term操作符
Boolean operators
布尔操作符可以将多个Term合并为一个复杂的逻辑查询。Lucene支持AND,
+,OR,NOT, -作为操作符号。注意,所有的符号必须为大写。
OR
OR操作符默认的连接操作符。这意味着,当没有给多个Term显式指定操作符时,将使用OR,只要其中一个Term含有,则可以查询出文档,这跟逻辑符 号||的意思相似。假设我们查询一个文档含有“jakarta apache”或者“jakarta”时,我们可以使用如下语法:
"jakarta apache" jakarta
或者
"jakarta apache" OR jakarta
AND
AND操作符规定必须所有的Term都出现才能满足查询条件,这跟逻辑符号&&意思相似。如果我们要搜索一个文档中同时含有“jakarta apache”和“jakarta lucene”,我们可以使用如下语法:
"jakarta apache" AND "jakarta lucene"
+
+操作符规定在其后的Term必须出现在文档中,也就是查询词中的MUST属性。举个例子来说,当我们要查询一个文档必须包含“jakarta”,同时可以包含也可以不包含“lucene”时,我们可以使用如下语法:
+jakarta apache
NOT
NOT操作符规定查询的文档必须不包含NOT之后的Term,这跟逻辑符号中的!相似。当我们要搜索一篇文档中必须含有“jakarta apache”同时不能含有“Jakarta lucene”时,我们可以使用如下查询;
"jakarta apache" NOT "jakarta lucene"
注意:NOT操作符不能使用在单独Term中,举例来说,以下查询将返回无结果:
NOT "jakarta apache"
-
-操作符排除了包含其后Term的文档,跟NOT有点类似,假设我们要搜索“Jakarta apache”但不包含“Jakarta lucene”时,我们使用如下语法:
"jakarta apache" -"jakarta lucene"
Grouping
Lucene支持使用圆括号来将查询表达式分组,这将在控制布尔控制查询中非常有用。举例来说:当搜索必须含有“website”,另外必须含有“jakarta”和“apache”之一,我们可以用如下语法:
(jakarta OR apache) AND website
这种语法对消除歧义,确保查询表达式的正确性具有很大的意义。
Field Grouping
Lucene支持对字段用圆括号来进行分组,当我们要查询标题中含有“return”和“pink ranther”时,我们可以使用如下语法:
title:(+return +"pink panther")
Escaping Special Characters
Lucene支持转义查询中的特殊字符,以下是Lucene的特殊字符清单:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
转义特殊字符我们可以使用符号“\”放于字符之前。比如我们要搜索(1+1):2,我们可以使用如下语法:
\(1\+1\)\:2
Tips: QueryParser.escape(q) 可转换q中含有查询关键字的字符!如:* ,? 等
发表评论
-
基于sensei+lucene的分布式搜索终于上线了-2012-12-08
2011-12-08 13:26 1650基于sensei+lucene的分布式搜索终于上线了 ... -
[转载] sensei分布式实时搜索系统源码解析(二) 分布式Search的流程
2011-07-22 14:57 1483看来自己很懒,发现前同事的sensei 研究了 转载: ht ... -
[转载] sensei分布式实时搜索系统源码解析(一) senseiServer的启动及若干概念
2011-07-22 14:55 1794看来自己很懒,发现前同事的sensei 研究了 转载:htt ... -
lucene分布式搜索sensei的使用及完善
2011-07-22 14:32 3552原创文章,转载请注明 ... -
转载:几种常见的基于Lucene的开源搜索解决方案对比
2011-04-06 14:38 1336一 直接使用 Lucene ( http://lucene ... -
转载: Apache Zookeeper入门1
2011-04-06 14:36 1907源: http://www.javabloger.com/ar ... -
各种字符串Hash函数比较
2011-02-12 14:54 4132Java自带的字符串hash函数: public ... -
Lucene MoreLikeThisQuery 例子 备注
2011-01-06 11:22 14581。 编码问题: MoreLikeThisQuery中的 ... -
Lucene MoreLikeThisQuery 例子
2011-01-04 13:42 2840要做一个跟文章标题相关的新闻,本来想简单做一下,就是把标 ... -
lucene 3.0 分词例子 转载
2010-12-27 17:30 1941源:http://hxraid.iteye.com/blog ... -
lucene基本概念
2010-12-03 15:51 1166一、lucene索引的建立 1 ... -
[转载] lucene使用与优化
2010-12-03 10:14 1061源:http://www.cnblogs.com/bysshi ... -
[转载] 几种常见的基于Lucene的开源搜索解决方案对比
2010-12-02 16:07 911源:http://blog.fulin.org/201 ... -
lucene中的Token, TokenStream, Tokenizer, Analyzer
2010-11-22 10:41 1359转载: Token: 如果一个字段被token化,这表示它经 ... -
Lucene3.0的几种分词系统
2010-11-17 17:25 12931、 StopAnalyzer StopAnalyze ... -
当前几个主要的Lucene中文分词器的比较
2010-11-17 12:35 13291. 基本介绍: paoding :Lucene中 ... -
lucene score explain 评分解释说明
2010-11-16 17:29 2270通过Searcher.explain(Query qu ... -
lucene 排序 (Sort SortField 构造函数)
2010-11-09 13:58 4124注意: 在lucene2.9中,排序的字段域必须inde ... -
lucene 2010 大会资料 Lucene Revolution 2010
2010-10-27 15:41 961lucene 2010 大会资料资料下载 http://ww ... -
bobo-browse 的分组统计(Faceted Search)
2010-10-25 16:43 2699基于lucene的bobo-browse 的分组统计(Face ...
相关推荐
**Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...
### Lucene查询语法详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于各种需要实现全文检索的应用场景之中。Lucene支持复杂的查询语法,能够灵活地处理多样化的查询需求,使得...
3. **查询语法**:深入学习 Lucene 的查询语言,包括布尔运算符、短语匹配和范围查询。 4. **性能优化**:探讨如何提升搜索速度,包括内存管理、缓存策略和段合并策略。 5. **实战应用**:通过实例演示如何将 Lucene...
3. **查询解析**:Lucene支持多种查询语法,包括布尔查询、短语查询、前缀查询等,可以构建复杂的查询表达式。 4. **结果排序**:Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)算法来计算文档与...
用户可以通过QueryParser类来构建复杂的查询表达式,3.6.0版本对查询语法进行了优化,提升了查询性能。 3. **分析器(Analyzer)**:分析器负责将输入文本分解为可搜索的词项。Lucene 3.6.0包含了多个预定义的分析...
**Lucene文档笔记详解** Lucene,源自Apache软件基金会4 Jakarta项目组,是一个备受开发者青睐的开源全文检索引擎工具包。它提供了强大的文本分析、索引构建和搜索功能,但值得注意的是,Lucene本身并不包含完整的...
- **增强的查询语言**:提供更加灵活多样的查询语法,满足复杂查询需求。 - **改进的分词机制**:增强了对不同语言的支持,并引入了更多的分词器选项。 - **扩展的排序功能**:支持基于多个字段或自定义函数的排序...
【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...
Lucene提供了丰富的查询语法,包括布尔查询、短语查询、范围查询、近似查询等。4.1.0版本的查询解析器对这些查询构造进行了改进,使查询更灵活、更强大。 6. **内存索引(Memory Indexing)**: 对于实时搜索场景,...
**全文检索技术与Lucene详解** 全文检索是一种在大量文本数据中快速查找包含特定词汇或短语的信息的技术。在互联网时代,随着数据量的爆炸性增长,高效、准确的全文检索变得至关重要。Lucene,由Apache软件基金会...
它可以处理多种查询语法,如布尔表达式(AND, OR, NOT, XOR)、短语查询、前缀查询、范围查询等。自定义查询构造器也是可能的,以适应特定的查询需求。 4. **搜索** `IndexSearcher`类是执行搜索的核心,它接受`...
《Apache Lucene 7.4.0:全文检索与索引库详解》 Apache Lucene 是一个开源的全文检索库,被广泛应用于各种搜索引擎和信息检索系统中。这个压缩包“lucene-7.4.0”包含了Lucene 7.4.0版本的所有核心组件和模块,为...
《深入理解Lucene 4.6:搜索引擎框架详解》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了完整的搜索功能,包括索引、搜索、高亮显示结果等,广泛应用于各种信息检索系统。本文将重点探讨...
Lucene支持丰富的查询语法,包括布尔逻辑、短语匹配、通配符和近似搜索等。 4. **搜索**:Lucene通过查询索引来查找匹配的文档,并根据相关性进行排序。相关性通常基于词频、位置和TF-IDF(词频-逆文档频率)等算法...
Lucene 4.0的搜索器提供了更高级的查询语法,支持布尔运算、短语匹配、近似搜索等。 二、Lucene 4.0新特性 1. 新的分析框架:引入了CharFilter和TokenFilter的概念,使得在分析阶段可以进行更复杂的字符级和词项级...
6. **搜索过程**:查询执行涉及查询分析、索引搜索和结果评分。使用TF-IDF算法计算相关性,对结果进行排序。 三、API详解 Lucene 2.0.0的主要API包括以下几个关键类: 1. **IndexWriter**:用于创建和更新索引,...
2.3 查询解析:Lucene支持丰富的查询语法,包括布尔运算符、短语查询、模糊查询等。查询解析器将用户输入的查询字符串转化为Lucene能理解的查询对象。 三、Lucene 7.2.0特性详解 3.1 分词改进:7.2.0版本优化了...
**Lucene 源码详解** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发,被广泛应用于构建高效的搜索功能。作为一款Java实现的全文搜索引擎架构,Lucene 提供了完整的索引和查询引擎,使得开发者能够快速...
3. **查询解析(Query Parsing)**:Lucene 提供了高级的查询解析器,可以处理多种查询语法,如布尔逻辑、短语查询、近似查询等。查询字符串会被解析为一系列的查询条款,这些条款会与索引进行匹配。 4. **搜索...
**Lucene 7.2.1 官方JAR包详解** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。作为Java编写的一个开源项目,Lucene 提供了强大的文本分析和索引功能,广泛应用于各种搜索引擎的开发。版本...