版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、lucene查询语法详解lucene提供了丰富的api来组合定制你所需要的查询器,同时也可以利用query parser提供的强大的查询语法解析来构造你想要的查询器。本文章详细的介绍了lucene的查询语法。通过java语法分析器把一个查询字符串解析成 lucene的查询器。在你选择使用query parser前,请考虑以下事项:如果你打算在程序中拼接查询语法串然后再利用query parser转换,那么强烈建议你利用相应的api来自己构造查询器。也就是说,query parser是为手工输入高级查询设计的,而不是为程序拼接语法串而设计的。不分词的字段也最好通过相应的api添加到查询器中,而不
2、是通过query parser。query parser 使用的analyser分析器,作用是将用户手工输入的文本转化为相应的term。如果一个字段的值是通过程序生成的(例如日期字段,关键词字段等),那 么在查询的时候也应该保持前后一致,利用程序生成相应的格式来查询。在查询的目标中,如果字段全部是程序生成的文本,(例如补齐的日期字段等),最好使用query parser以便查询的时候也是一致的格式。至于其它的,例如日期范围查询,关键字查询等,最好调用相应的api来构建查询器。目标字段中如果仅仅拥有有 限的枚举值时,最好通过下拉列表提供给用户选择,然后利用termquery添加到查询器中,而不是
3、而其拼接到查询字符串然后利用query parser来解析。terms一个查询将分解为若干term以及操作符,有两种term,其一是单一term,其二为短语。单一term是经过分析器分词后的最小单元,他就是一个简单 的词,例如“test”和“hello”。短语则是一组被双引号括起来的一组词,例如:“hello dolly”,多个term可以通过布尔操作合并在一个更加复杂的查询器中。注意:一般来说,创建索引的分析器和查询的分析器最好保持一致(当然也有特殊情况,比如单字索引,分词组合查询),所以选择一个不会干扰查询词的分析器是很重要的。fieldslucene支持多字段数据,当你在查询的时候你可以
4、指定一个字段查询,也可以使用默认的字段。你可以使用 字段名 + “:” + 查询词来指定字段名搜索。举个例子,让我们假定lucene的索引中含有两个字段,title字段和text字段,其中text字段是默认字段,当你想找 到一篇文档其中标题包含“the right way”同时文本中包含“go”,你可以输入:title:the right way and text:go或者:title: the right way and go如果字段是默认字段的话,在查询语法中可以不需要显式指定。注意,使用默认字段有可能会造成如下的结果:title:do it right以上查询将查找标题中含有“do”,t
5、ext字段字段中含有“it”和“right”的文档,因为text是默认字段,所以如果想要查找title中完整包含的很用引号引起来。二、模糊查询term modifierslucene支持在term中使用通配符来支持模糊查询。wildcard searches 类:org.apache.lucene.search.wildcardquerylucene支持单个或者多个字符的通配符查询,匹配单一字符使用符号“?”,匹配多个字符使用符号“*”。“?”通配符将查找所有满足通过一个字符替换后符合条件的文档。比如:搜索“test”和“text”你可以使用:te?t“*”通配符将查询0个或者多个字符替换后符
6、合条件的。举例来说,查询test,tests或者tester,你可以使用一下字符串来搜索:test*当然,你也可以将“*”放在字符的中间te*t注意:你不能将“*”和“?”放在第一个字符来查询。(lucene应该是出于性能考虑,所以不支持该功能)fuzzy searches org.apache.lucene.search.fuzzyquerylucene支持基于编辑距离算法的模糊搜索,你可以使用波浪符号“”放在查询词的后面,比如搜索一个与“roam”拼写相近的词可以使用:roam该查询将寻找类似“foam”和“roams”等的词语。也可以说是相似度查询。proximity searches
7、org.apache.lucene.search.prefixquerylucene支持指定距离查询,你可以使用波浪号“”加数字在查询词后。举例来说搜索“apache”和“jakarta”距离10个字符以内,你可以使用如下语法:jakarta apache10通过这个语法支持,我们可以单字索引,分词查询,分词完后,满足每个词的单字必须间距为1。这样可以保证100%的召回率,但是在索引方面将造成索引臃肿,同时查询速度也将在某程度上降低,一般来说,在150w文章数据到200w数据的时候性能将会明显的降低。range searchesorg.apache.lucene.search.rangeque
8、ry范围查询允许你指定某个字段最大值和最小值,查询在二者之间的所有文档。范围查询可以包含或者不包含最大值和最小值,排序是按照字典顺序来排序的。mod_date:20020101 to 20030101这个将查找满足mode_date字段在大于等于20020101,小于等于20030101范围的所有文档,注意:范围查询并不是为日期字段专设的,你也可以对非日期字段进行范围查询。title:aida to carmen这个将查找所有标题在aida和carmen之间但不包含aida和carmen的文档。包含最大值和最小值的查询使用方括号,排除则使用花括号。 三、优先级boosting a termlu
9、cene支持给不同的查询词设置不同的权重。设置权重使用“”符号,将“”放于查询词的尾部,同时跟上权重值,权重因子越大,该词越重要。设置权重允许你通过给不同的查询词设置不同的权重来影响文档的相关性,假如你在搜索:jakarta apache如果你认为“jakarta”在查询时中更加重要,你可以使用如下语法:jakarta4 apache这将使含有jakarta的文档具有更高的相关性,同样你也可以给短语设置权重如下:jakarta apache4 jakarta lucene在默认情况下,权重因子为1,当然权重因子也可以小于1。四、term操作符boolean operators布尔操作符可以将多
10、个term合并为一个复杂的逻辑查询。lucene支持and,+,or,not, -作为操作符号。注意,所有的符号必须为大写。oror操作符默认的连接操作符。这意味着,当没有给多个term显式指定操作符时,将使用or,只要其中一个term含有,则可以查询出文档,这跟逻辑符 号|的意思相似。假设我们查询一个文档含有“jakarta apache”或者“jakarta”时,我们可以使用如下语法:jakarta apache jakarta或者jakarta apache or jakartaandand操作符规定必须所有的term都出现才能满足查询条件,这跟逻辑符号&意思相似。如果我们要搜索一个文档
11、中同时含有“jakarta apache”和“jakarta lucene”,我们可以使用如下语法: jakarta apache and jakarta lucene+操作符规定在其后的term必须出现在文档中,也就是查询词中的must属性。举个例子来说,当我们要查询一个文档必须包含“jakarta”,同时可以包含也可以不包含“lucene”时,我们可以使用如下语法:+jakarta apachenotnot操作符规定查询的文档必须不包含not之后的term,这跟逻辑符号中的!相似。当我们要搜索一篇文档中必须含有“jakarta apache”同时不能含有“jakarta lucene”时,
12、我们可以使用如下查询;jakarta apache not jakarta lucene注意:not操作符不能使用在单独term中,举例来说,以下查询将返回无结果:not jakarta apache-操作符排除了包含其后term的文档,跟not有点类似,假设我们要搜索“jakarta apache”但不包含“jakarta lucene”时,我们使用如下语法:jakarta apache -jakarta lucenegroupinglucene支持使用圆括号来将查询表达式分组,这将在控制布尔控制查询中非常有用。举例来说:当搜索必须含有“website”,另外必须含有“jakarta”和“apache”之一,我们可以用如下语法:(jakarta or apache) and website这种语法对消除歧义,确保查询表达式的正确性具有很大的意义。field groupinglucene支持对字段用圆括号来进行分组,当我们要查询标题中含有“return”和“pink ranther”时,我们可以使用如下语法:title:(+return +pink panther)escaping special characterslucene支持转义查询中的特殊字符,以下是lucene的特
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前后台工作制度
- 一休一工作制度
- 刅公室工作制度
- 农业工作制度
- 两种工作制度
- 2026 年中职钢铁冶炼(钢铁冶炼工艺)试题及答案
- 寝室用电安全教育
- 幼儿园大班水墨画培训
- 车间用电安全检查
- 新教师入职培训会标
- 2025年贵州省高考生物试卷真题(含答案及解析)
- 雨课堂在线学堂《资治通鉴》导读课后作业单元考核答案
- 2025年南京市事业单位招聘考试综合类专业能力测试试卷(管理类)真题
- 2025年劳动教育课考试题库(含答案)
- 中文俄文贸易合同范本
- 知道智慧树网课《工程伦理(武汉科技大学)》章节测试答案
- 深圳市工务署参考品牌库(2021.12)
- 电线电缆市场营销方案
- 翻车机岗位存在的安全风险
- 货物损坏应急预案(3篇)
- 上海事业单位笔试真题2025
评论
0/150
提交评论