- 浏览: 257870 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (289)
- java (72)
- oracle (3)
- mysql (5)
- spring (28)
- hibernate (2)
- osgi (0)
- linux (2)
- ExtJs (1)
- jvm (0)
- mybatis (7)
- 分布式 (11)
- MINA (6)
- apache+tomcat (13)
- js+htm (7)
- android (44)
- http (1)
- hbase+hdoop (0)
- memcache (13)
- search (27)
- 部署及性能 (12)
- mongoDB (2)
- 多线程 (12)
- 安全管理验证 (9)
- struts (1)
- webservice (0)
- easyUI (1)
- spring security (16)
- pattern (6)
- 算法 (2)
最新评论
-
lzh8189146:
CommonsHttpSolrServer这个类,现在是不是没 ...
CommonsHttpSolrServer -
xiaochanzi:
我按照你的方法试了下,tomcat6可以发布,但是访问任何网页 ...
基于内嵌Tomcat的应用开发 -
phoneeye:
麻烦你,如果是抄来的文章,请给出来源。谢谢
ant 两则技巧 -
neverforget:
转载不注明出处
Spring Security3.1登陆验证 替换 usernamepasswordfilter -
liang1022:
若不使用eclipse ,如何在命令行下 运行服务端程序 ?
WebService CXF学习(入门篇2):HelloWorld
Lucene的查询语法
Lucene提供了方便您创建自建查询的API,也通过QueryParser提供了强大的查询语言。
本文讲述Lucene的查询语句解析器支持的语法,Lucene的查询语句解析器是使用JavaCC工具生成的词法解析器,它将查询字串解析为Lucene Query对象。
项(Term)
一条搜索语句被拆分为一些项(term)和操作符(operator)。项有两种类型:单独项和短语。
单独项就是一个单独的单词,例如"test" , "hello"。
短语是一组被双引号包围的单词,例如"hello dolly"。
多个项可以用布尔操作符连接起来形成复杂的查询语句(接下来您就会看到)。
注意:Analyzer建立索引时使用的解析器和解析单独项和短语时的解析器相同,因此选择一个不会受查询语句干扰的Analyzer非常重要。
域(Field)
Lucene支持域。您可以指定在某一个域中搜索,或者就使用默认域。域名及默认域是具体索引器实现决定的。
您可以这样搜索域:域名+":"+搜索的项名。
举个例子,假设某一个Lucene索引包含两个域,title和text,text是默认域。如果您想查找标题为"The Right Way"且含有"don't go this way"的文章,您可以输入:
title:"The Right Way" AND text:go
或者
title:"Do it right" AND right
因为text是默认域,所以这个域名可以不写出。
注意:域名只对紧接于其后的项生效,所以
title:Do it right
只有"Do"属于title域。"it"和"right"仍将在默认域中搜索(这里是text域)。
项修饰符(Term Modifiers)
Lucene支持项修饰符以支持更宽范围的搜索选项。
用通配符搜索
Lucene支持单个与多个字符的通配搜索。
使用符号"?"表示单个任意字符的通配。
使用符号"*"表示多个任意字符的通配。
单个任意字符匹配的是所有可能单个字符。例如,搜索"text或者"test",可以这样:
te?t
多个任意字符匹配的是0个及更多个可能字符。例如,搜索test, tests 或者 tester,可以这样:
test*
您也可以在字符窜中间使用多个任意字符通配符。
te*t
注意:您不能在搜索的项开始使用*或者?符号。
模糊查询
Lucene支持基于Levenshtein Distance与Edit Distance算法的模糊搜索。要使用模糊搜索只需要在单独项的最后加上符号"~"。例如搜索拼写类似于"roam"的项这样写:
roam~
这次搜索将找到形如foam和roams的单词。
注意:使用模糊查询将自动得到增量因子(boost factor)为0.2的搜索结果.
邻近搜索(Proximity Searches)
Lucene还支持查找相隔一定距离的单词。邻近搜索是在短语最后加上符号"~"。例如在文档中搜索相隔10个单词的"apache"和"jakarta",这样写:
"jakarta apache"~10
Boosting a Term
Lucene provides the relevance level of matching documents based on the terms found. To boost a term use the caret, "^", symbol with a boost factor (a number) at the end of the term you are searching. The higher the boost factor, the more relevant the term will be.
Lucene可以设置在搜索时匹配项的相似度。在项的最后加上符号"^"紧接一个数字(增量值),表示搜索时的相似度。增量值越高,搜索到的项相关度越好。
Boosting allows you to control the relevance of a document by boosting its term. For example, if you are searching for jakarta apache and you want the term "jakarta" to be more relevant boost it using the ^ symbol along with the boost factor next to the term. You would type:
通过增量一个项可以控制搜索文档时的相关度。例如如果您要搜索jakarta apache,同时您想让"jakarta"的相关度更加好,那么在其后加上"^"符号和增量值,也就是您输入:
jakarta^4 apache
This will make documents with the term jakarta appear more relevant. You can also boost Phrase Terms as in the example:
这将使得生成的doucment尽可能与jakarta相关度高。您也可以增量短语,象以下这个例子一样:
"jakarta apache"^4 "jakarta lucene"
By default, the boost factor is 1. Although, the boost factor must be positive, it can be less than 1 (i.e. .2)
默认情况下,增量值是1。增量值也可以小于1(例如0.2),但必须是有效的。
布尔操作符
布尔操作符可将项通过逻辑操作连接起来。Lucene支持AND, "+", OR, NOT 和 "-"这些操作符。(注意:布尔操作符必须全部大写)
OR
OR操作符是默认的连接操作符。这意味着如果两个项之间没有布尔操作符,就是使用OR操作符。OR操作符连接两个项,意味着查找含有任意项的文档。这与集合并运算相同。符号||可以代替符号OR。
搜索含有"jakarta apache" 或者 "jakarta"的文档,可以使用这样的查询:
"jakarta apache" jakarta
或者
"jakarta apache" OR jakarta
AND
AND操作符匹配的是两项同时出现的文档。这个与集合交操作相等。符号&&可以代替符号AND。
搜索同时含有"jakarta apache" 与 "jakarta lucene"的文档,使用查询:
"jakarta apache" AND "jakarta lucene"
+
"+"操作符或者称为存在操作符,要求符号"+"后的项必须在文档相应的域中存在。
搜索必须含有"jakarta",可能含有"lucene"的文档,使用查询:
+jakarta apache
NOT
NOT操作符排除那些含有NOT符号后面项的文档。这和集合的差运算相同。符号!可以代替符号NOT。
搜索含有"jakarta apache",但是不含有"jakarta lucene"的文档,使用查询:
"jakarta apache" NOT "jakarta lucene"
注意:NOT操作符不能单独与项使用构成查询。例如,以下的查询查不到任何结果:
NOT "jakarta apache"
-
"-"操作符或者禁止操作符排除含有"-"后面的相似项的文档。
搜索含有"jakarta apache",但不是"jakarta lucene",使用查询:
"jakarta apache" -"jakarta lucene"
分组(Grouping)
Lucene支持使用圆括号来组合字句形成子查询。这对于想控制查询布尔逻辑的人十分有用。
搜索含有"jakarta"或者"apache",同时含有"website"的文档,使用查询:
(jakarta OR apache) AND website
这样就消除了歧义,保证website必须存在,jakarta和apache中之一也存在。
转义特殊字符(Escaping Special Characters)
Lucene支持转义特殊字符,因为特殊字符是查询语法用到的。现在,特殊字符包括
+ - && || ! ( ) { } [ ] ^ " ~ * ? : /
转义特殊字符只需在字符前加上符号/,例如搜索(1+1):2,使用查询
/(1/+1/)/:2
发表评论
-
提高nutch爬取效率
2012-06-08 12:47 943提高nutch爬取效率 分类 ... -
CommonsHttpSolrServer
2012-03-28 09:31 2082CommonsHttpSolrServer ... -
利用SOLR搭建企业搜索平台 之十(数据库数据导入到solr)
2012-03-28 09:31 745利用SOLR搭建企业搜索平台 之十(数据库数据导 ... -
利用SOLR搭建企业搜索平台 之九(solr的查询语法)
2012-03-28 09:31 837利用SOLR搭建企业搜索平台 之九(solr的查 ... -
利用SOLR搭建企业搜索平台 之八(solr 实现去掉重复的搜索结果,打SOLR-236_collapsing.patch补丁)
2012-03-28 09:31 980引用Bory.Chanhttp://blog.chenlb.c ... -
利用SOLR搭建企业搜索平台 之五(solrj)
2012-03-27 14:59 859利用SOLR搭建企业搜索平台 之五(solrj) ... -
Solr solrconfig.xml的翻译
2012-03-13 08:23 896Solr solrconfig.xml的翻译 ... -
使用Apache Solr对数据库建立索引
2012-03-13 08:23 861使用Apache Solr对数据库建立索引 ( ... -
解决DataImportHandler从数据库导入大量数据而内存溢出的问题
2012-03-13 08:23 931解决DataImportHandler从数据库导入大 ... -
Solr 创建索引的原理 源码分析
2012-03-13 08:24 1161Solr 创建索引的原理 源码分析 (2011 ... -
Solr Replication (复制) 索引和文件的工作机制
2012-03-13 08:24 811Solr Replication (复制) 索引和文 ... -
Solr 查询中fq参数的解析原理
2012-03-14 08:13 820Solr 查询中fq参数的解析原理 (2011- ... -
Solr 分词器(analyzer)是怎么传到Luence的
2012-03-14 08:13 1091Solr 分词器(analyzer)是怎么传到Lue ... -
SOLR的分布式部署
2012-03-14 08:14 1032转载:http://blog.sina.com.cn/s/bl ... -
Solr 删除数据的几种方式
2012-02-22 08:40 1005转载:Solr 删除数据的几种方式 发表于:2010 ... -
Solr Data Import 快速入门
2012-02-26 12:12 829转载:Solr Data Import 快速入门 发 ... -
使用 solr php 的输出
2012-02-22 08:41 850转载:使用 solr php 的输出 发表于:200 ... -
Solr Multicore 结合 Solr Distributed Searching 切分大索引来搜索
2012-02-26 12:13 789Solr Multicore 结合 Solr Dist ... -
Solr Multicore 试用小记
2012-02-26 12:13 752Solr Multicore 试用小记 转载: ... -
Solr1.4.0源码分析二 Solr分布式搜索中URL的正确用法和原理
2012-02-26 12:13 985Solr1.4.0源码分析二 Solr分布式搜索 ...
相关推荐
### Lucene查询语法详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于各种需要实现全文检索的应用场景之中。Lucene支持复杂的查询语法,能够灵活地处理多样化的查询需求,使得...
**Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...
用到的工具 jsoup+spring+struct+DButil+mysql+lucene 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql...
3. **查询解析**: 用户输入的查询字符串会被转换为Lucene查询语法,QueryParser类负责这个过程。它可以处理各种查询类型,如布尔查询、短语查询、前缀查询等。 4. **文档检索**: 使用IndexReader和IndexSearcher类...
#### Lucene 查询语法 - **语法关键字**:用于构建查询的特殊字符,如 AND、OR、NOT 等。 - **查询词(Term)**:用户查询时输入的基本单位。 - **查询域(Field)**:指定查询作用于文档的哪个字段。 - **通配符查询...
2. **查询解析和语法**: `lucene-queryparser.jar`和`lucene-sandbox.jar`提供了查询解析器,允许用户使用标准的Lucene查询语法来构建复杂的查询表达式。`lucene-suggest.jar`支持自动补全和建议功能。 3. **内存和...
24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)
3. 查询解析:用户可以使用标准的Lucene查询语法或构造复杂的查询表达式,Lucene.Net会将其解析为可执行的搜索计划。 4. 高效搜索:通过倒排索引,Lucene.Net可以迅速找到包含特定词语的文档,支持多种搜索类型,如...
3. **构造查询**:`QueryParser`用于构建Lucene查询语句,它理解标准的Lucene查询语法。提供一个Analyzer和查询字符串,`QueryParser`将生成一个`Query`对象。 4. **执行查询**:使用`IndexSearcher`的`search()`...
在Lucene中,表达式查询是一种高级查询方式,允许用户通过特定的语法构造复杂的查询条件。本篇文章将深入探讨Lucene表达式处理查询的原理、语法及示例。 ### 1. Lucene表达式查询基础 Lucene表达式查询是基于...
1. **查询语法**:Solr支持丰富的查询语法,包括标准查询解析器(Standard Query Parser)和Lucene查询语法。例如,`q=field:query`用于指定字段查询,`q=*:*`表示匹配所有文档。 2. **查询解析**:查询字符串会被...
lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合
开发人员可以使用自然语言或Lucene查询语法来创建查询,然后通过`Searcher`类执行查询,获取匹配的文档。`TopDocs`对象返回搜索结果,包括文档得分和排名信息。 除此之外,PyLucene还支持高级特性,如分词器...
它支持标准的 Lucene 查询语法,包括布尔运算符(AND、OR、NOT)、字段限定、模糊匹配、短语查询等,使用户可以方便地构造复杂的搜索条件。 在实际应用中,使用这些组件,开发者可以构建一个高效的全文搜索引擎。...
Tripod介绍Tripod用于对文本数据的实时匹配分析,其语法主要兼容了lucene语法,并做了微调。在很多文本处理的应用中,会有类似数据订阅的需求,即将客户关注的数据推送给客户。一种典型的实现是,我们会根据用户...
- **查询API**:Solr支持多种查询语法,如Lucene查询语法、Solr查询语法等。 2. **Windows上安装Solr 8.6.0** - **解压**:首先,需要将"solr-8.6.0.zip"解压到本地文件夹。 - **启动服务器**:进入解压后的目录...
同时,Solr支持多种查询语法,包括标准查询解析器(Standard Query Parser)、Lucene查询语法(LQL)等,以及高级特性如布尔运算、短语匹配、模糊搜索等。 其次,SolrCloud是Solr的分布式部署模式,它基于ZooKeeper...
- 查询分析(Query Parsing):将用户的输入转换为查询语法,可能涉及短语查询、布尔查询等。 - 匹配评分(Scoring):Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)或其他评分算法,计算每个文档...