Lucene/kibana查询 语法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene/kibana查询 语法相关的知识,希望对你有一定的参考价值。
参考技术A Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询。Field字段查询
Lucene支持针对某个字段进行搜索,语法如:
搜索语句时需要加上双引号,否则:
WildCard Searches通配符查询
支持在单个单词或者语句中添加通配符:
例如:
文档中不支持通配符放在搜索的开头,如*test,但是在kibana中是支持这种搜索语法的。
支持搜索模糊词,如果想要搜索模糊词,需要在词语后面加上符号~
例如:
前面的模糊词只是针对某个单词,在语句间也存在模糊搜索的概念,只不过不是单词的模糊,而是单词之间内容的模糊。
注意要使用双引号`""`包围
例如:
支持范围搜索,可以指定最小值和最大值,会自动查找在这之间的文档。 如果是单词,则会按照字典顺序搜索。
例如:
如果单词的匹配度很高,一个文档中或者一个字段中可以匹配多次,那么可以提升该词的相关度。使用符号^提高相关度。
例如:
支持多种操作符:
AND操作符用于连接两个搜索条件,仅当两个搜索条件都满足时,才认为匹配。通常用来做交集操作。也可以使用&&替换。
注意必须使用大写。如果不使用AND,而是and,可能会被单做关键词进行搜索!
例如:
=> 搜索同时包含tom和john的文档
或者
OR操作符用于连接两个搜索条件,当其中一个条件满足时,就认为匹配。通常用来做并集操作。也可以使用||替换。
注意必须使用大写。
例如:
NOT操作符排除某个搜索条件。通常用来做差集操作也可以使用!替换。
注意必须大写。
例如:
=>搜索包含tom,不包含john的文档
或者
在kibana中支持单独使用,如:
=>排除包含test的文档NOTtest
包含该操作符后跟着的搜索条件,如:
=>搜索包含tom的文档
作用于AND的差不多,但是支持单独使用
排除该操作符后跟着的搜索条件,如:
=>搜索不包含tom的文档
效果类似NOT
支持使用小括号对每个子句进行分组,形成更为复杂的查询逻辑。
例如:
也支持在字段中使用小括号:
由于Lucene中支持很多的符号,如
因此如果需要搜索 (1+1):2 需要对改串进行转换,使用字符\。
lucene(Kibana)搜索规则
本文转载自:http://blog.csdn.net/lwwgtm/article/details/60353812
kibanna用的是lucene的搜索规则
Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html
(1) 语法关键字
+ - && || ! ( ) [ ] ^ " ~ * ? : \\
如果所要查询的查询词中本身包含关键字,则需要用\\进行转义
(2) 查询词(Term)
Lucene支持两种查询词,一种是单一查询词,如"hello",一种是词组(phrase),如"hello world"。
(3) 查询域(Field)
在查询语句中,可以指定从哪个域中寻找查询词,如果不指定,则从默认域中查找。
查询域和查询词之间用:分隔,如title:"Do it right"。
:仅对紧跟其后的查询词起作用,如果title:Do it right,则仅表示在title中查询Do,而it right要在默认域中查询。
(4) 通配符查询(Wildcard)
支持两种通配符:?表示一个字符,*表示多个字符。
通配符可以出现在查询词的中间或者末尾,如te?t,test*,te*t,但决不能出现在开始,如*test,?test。
(5) 模糊查询(Fuzzy)
模糊查询的算法是基于Levenshtein Distance,也即当两个词的差别小于某个比例的时候,就算匹配,如roam~0.8,即表示差别小于0.2,相似度大于0.8才算匹配。
(6) 临近查询(Proximity)
在词组后面跟随~10,表示词组中的多个词之间的距离之和不超过10,则满足查询。
所谓词之间的距离,即查询词组中词为满足和目标词组相同的最小移动次数。
如索引中有词组"apple boy cat"。
如果查询词为"apple boy cat"~0,则匹配。
如果查询词为"boy apple cat"~2,距离设为2方能匹配,设为1则不能匹配。
(0) | boy | apple | cat |
(1) | boy apple | cat | |
(2) | apple | boy | cat |
如果查询词为"cat boy apple"~4,距离设为4方能匹配。
(0) | cat | boy | apple |
(1) | cat boy | apple | |
(2) | boy | cat apple | |
(3) | boy apple | cat | |
(4) | apple | boy | cat |
(7) 区间查询(Range)
区间查询包含两种,一种是包含边界,用[A TO B]指定,一种是不包含边界,用A TO B指定。
如date:[20020101 TO 20030101],当然区间查询不仅仅用于时间,如title:Aida TO Carmen
(8) 增加一个查询词的权重(Boost)
可以在查询词后面加^N来设定此查询词的权重,默认是1,如果N大于1,则说明此查询词更重要,如果N小于1,则说明此查询词更不重要。
如jakarta^4 apache,"jakarta apache"^4 "Apache Lucene"
(9) 布尔操作符
布尔操作符包括连接符,如AND,OR,和修饰符,如NOT,+,-。
默认状态下,空格被认为是OR的关系,QueryParser.setDefaultOperator(Operator.AND)设置为空格为AND。
+表示一个查询语句是必须满足的(required),NOT和-表示一个查询语句是不能满足的(prohibited)。
(10) 组合
可以用括号,将查询语句进行组合,从而设定优先级。
如(jakarta OR apache) AND website
Lucene的查询语法是由QueryParser来进行解析,从而生成查询对象的。
通过编译原理我们知道,解析一个语法表达式,需要经过词法分析和语法分析的过程,也即需要词法分析器和语法分析器。
QueryParser是通过JavaCC来生成词法分析器和语法分析器的。
以上是关于Lucene/kibana查询 语法的主要内容,如果未能解决你的问题,请参考以下文章