`

Lucene查询语法

阅读更多
一、模糊查询
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中含有查询关键字的字符!如:* ,? 等

本文转自:http://www.oschina.net/question/1092_560
分享到:
评论

相关推荐

    lucene的查询语法事例

    **Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...

    lucene去重、分组统计

    用到的工具 jsoup+spring+struct+DButil+mysql+lucene 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql...

    lucene.net+完全入门教程

    3. **查询解析**: 用户输入的查询字符串会被转换为Lucene查询语法,QueryParser类负责这个过程。它可以处理各种查询类型,如布尔查询、短语查询、前缀查询等。 4. **文档检索**: 使用IndexReader和IndexSearcher类...

    lucene学习全方面剖析总结

    #### Lucene 查询语法 - **语法关键字**:用于构建查询的特殊字符,如 AND、OR、NOT 等。 - **查询词(Term)**:用户查询时输入的基本单位。 - **查询域(Field)**:指定查询作用于文档的哪个字段。 - **通配符查询...

    lucene7.1.0所需jar包

    2. **查询解析和语法**: `lucene-queryparser.jar`和`lucene-sandbox.jar`提供了查询解析器,允许用户使用标准的Lucene查询语法来构建复杂的查询表达式。`lucene-suggest.jar`支持自动补全和建议功能。 3. **内存和...

    24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1).doc

    24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)

    Incubating-Apache-Lucene.Net-2.0-004-11Mar07.src.zip

    3. 查询解析:用户可以使用标准的Lucene查询语法或构造复杂的查询表达式,Lucene.Net会将其解析为可执行的搜索计划。 4. 高效搜索:通过倒排索引,Lucene.Net可以迅速找到包含特定词语的文档,支持多种搜索类型,如...

    Lucene检索代码

    3. **构造查询**:`QueryParser`用于构建Lucene查询语句,它理解标准的Lucene查询语法。提供一个Analyzer和查询字符串,`QueryParser`将生成一个`Query`对象。 4. **执行查询**:使用`IndexSearcher`的`search()`...

    lucene表达式处理查询

    在Lucene中,表达式查询是一种高级查询方式,允许用户通过特定的语法构造复杂的查询条件。本篇文章将深入探讨Lucene表达式处理查询的原理、语法及示例。 ### 1. Lucene表达式查询基础 Lucene表达式查询是基于...

    Solr 查询,索引

    1. **查询语法**:Solr支持丰富的查询语法,包括标准查询解析器(Standard Query Parser)和Lucene查询语法。例如,`q=field:query`用于指定字段查询,`q=*:*`表示匹配所有文档。 2. **查询解析**:查询字符串会被...

    lucene.NET使用教程整合

    lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合

    pylucene-3.0.0-1-src.tar.gz

    开发人员可以使用自然语言或Lucene查询语法来创建查询,然后通过`Searcher`类执行查询,获取匹配的文档。`TopDocs`对象返回搜索结果,包括文档得分和排名信息。 除此之外,PyLucene还支持高级特性,如分词器...

    luncene架包

    它支持标准的 Lucene 查询语法,包括布尔运算符(AND、OR、NOT)、字段限定、模糊匹配、短语查询等,使用户可以方便地构造复杂的搜索条件。 在实际应用中,使用这些组件,开发者可以构建一个高效的全文搜索引擎。...

    tripod:实时文本匹配与Lucene的查询语法兼容

    Tripod介绍​Tripod用于对文本数据的实时匹配分析,其语法主要兼容了lucene语法,并做了微调。在很多文本处理的应用中,会有类似数据订阅的需求,即将客户关注的数据推送给客户。一种典型的实现是,我们会根据用户...

    最新版windows solr-8.6.0.zip

    - **查询API**:Solr支持多种查询语法,如Lucene查询语法、Solr查询语法等。 2. **Windows上安装Solr 8.6.0** - **解压**:首先,需要将"solr-8.6.0.zip"解压到本地文件夹。 - **启动服务器**:进入解压后的目录...

    apache-solr-ref-guide-6.6.html

    同时,Solr支持多种查询语法,包括标准查询解析器(Standard Query Parser)、Lucene查询语法(LQL)等,以及高级特性如布尔运算、短语匹配、模糊搜索等。 其次,SolrCloud是Solr的分布式部署模式,它基于ZooKeeper...

    Lucene索引和查询

    - 查询分析(Query Parsing):将用户的输入转换为查询语法,可能涉及短语查询、布尔查询等。 - 匹配评分(Scoring):Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)或其他评分算法,计算每个文档...

Global site tag (gtag.js) - Google Analytics