<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Lucene on Dapeng Zhang</title><link>https://zhangdapeng.dev/tags/lucene/</link><description>Recent content in Lucene on Dapeng Zhang</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 08 Jul 2025 09:48:02 +0000</lastBuildDate><atom:link href="https://zhangdapeng.dev/tags/lucene/index.xml" rel="self" type="application/rss+xml"/><item><title>Kibana使用之Lucene的语法查询</title><link>https://zhangdapeng.dev/p/kibana-shi-yong-zhi-lucene-de-yu-fa-cha-xun/</link><pubDate>Tue, 08 Jul 2025 09:48:02 +0000</pubDate><guid>https://zhangdapeng.dev/p/kibana-shi-yong-zhi-lucene-de-yu-fa-cha-xun/</guid><description>&lt;p&gt;Kibana使用的查询语法是Lucene的查询语法，这里在使用Kibana的同事一定要注意，不然，在进行搜索的时候，你会抓狂的。&lt;br&gt;
下面了解下Lucene的查询语法，了解了Lucene的查询语法也就知道了改如何使用Kibana的使用方式&lt;br&gt;
Lucene查询语法以可读的方式书写，然后使用JavaCC进行词法转换，转换成机器可识别的查询。&lt;/p&gt;
&lt;h3 id="词语查询语法如下"&gt;&lt;strong&gt;词语查询&lt;/strong&gt;，语法如下
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;here&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;there&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;here,there&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="字段查询语法如下"&gt;&lt;strong&gt;字段查询&lt;/strong&gt;，语法如下
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tag:there
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tag:&lt;span style="color:#e6db74"&gt;&amp;#34;there are&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;搜索语句是需要加上双引号，否则&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tag:there are
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;就意味着，搜索tag为there，或者包含are关键字的文档&lt;/p&gt;
&lt;h3 id="修饰符查询通过增加修饰从而扩大查询的范围"&gt;&lt;strong&gt;修饰符查询，通过增加修饰，从而扩大查询的范围。&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;通配符一般包括如下&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;?:匹配单个字符&lt;br&gt;
*:匹配0个或多个字符&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;语法如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;?tere
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意味着搜索there、where等类似的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;test*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意味着搜索test、tests、tester&lt;/p&gt;
&lt;h3 id="模糊词查询就是在词语后面加上符号语法如下"&gt;**模糊词查询，就是在词语后面加上符号~。**语法如下
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;he~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;意味着搜索her或hei等词&lt;br&gt;
也可以在~后面添加模糊系数，模糊系数[0-1]，越靠近1表示越相近，默认模糊系数为0.5。语法如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;he~0.8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="邻近词查询语法如下"&gt;&lt;strong&gt;邻近词查询&lt;/strong&gt;，语法如下
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;here there&amp;#34;&lt;/span&gt;~10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代表搜索包含&amp;quot;here&amp;quot;,&amp;ldquo;there&amp;quot;的文档，这两个词中间可以有一部分内容（这部分的内容通过字符个数显示）&lt;br&gt;
能够匹配到结果的如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;here wowo wowo there&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;here,wowow,wowow,there&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="范围查询可以指定最大值和最小值会自动查找在这之间的文档如果是单词则会按照字典顺序搜索"&gt;&lt;strong&gt;范围查询&lt;/strong&gt;，可以指定最大值和最小值，会自动查找在这之间的文档。如果是单词，则会按照字典顺序搜索。
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;{}尖括号表示不包含最小值和最大值，可以单独使用&lt;br&gt;
[]方括号表示包含最小值和最大值，可以单独使用。如下：&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;如果搜索成绩grade字段小于等于80分，大于60分的&lt;br&gt;
可以写成下面的方式&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;grade:&lt;span style="color:#f92672"&gt;{&lt;/span&gt;60,80&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果搜索name在A和C之间的，可以使用如下的语法&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;name:&lt;span style="color:#f92672"&gt;{&lt;/span&gt;A,C&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="词语相关度查询"&gt;&lt;strong&gt;词语相关度查询&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;如果单词的匹配度很高，一个文档中或者一个字段中可以匹配多次，那么可以提升该词的相关度。使用符号^提高相关度。&lt;/p&gt;
&lt;p&gt;提高jarkarta的比重&lt;br&gt;
jakarta apache&lt;br&gt;
可以采用下面的语法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jakarta^4 apache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="布尔操作符"&gt;&lt;strong&gt;布尔操作符&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;支持多种操作符：&lt;/p&gt;
&lt;h3 id="and"&gt;&lt;strong&gt;AND&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;AND操作符用于连接两个搜索条件，仅当两个搜索条件都满足时，才认为匹配。通常用来做交集操作。也可以使用&amp;amp;&amp;amp;替换。&lt;br&gt;
注意必须使用大写。如果不使用AND，而是and，可能会被单做关键词进行搜索！&lt;/p&gt;
&lt;p&gt;例如：搜索同时包含a和b的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a AND b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="or"&gt;&lt;strong&gt;OR&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;OR操作符用于连接两个搜索条件，当其中一个条件满足时，就认为匹配。通常用来做并集操作。也可以使用||替换。注意必须使用大写。&lt;/p&gt;
&lt;p&gt;例如：搜索包含a或者b的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a OR b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#f92672"&gt;||&lt;/span&gt; b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="not"&gt;&lt;strong&gt;NOT&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;NOT操作符排除某个搜索条件。通常用来做差集操作也可以使用!替换。注意必须大写。&lt;/p&gt;
&lt;p&gt;例如：搜索包含a，不包含b的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a NOT b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; !b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在kibana中支持单独使用，如：排除包含test的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NOT test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="加号"&gt;&lt;strong&gt;+（加号）&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;包含该操作符后跟着的搜索条件，如：搜索包含tom的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+tom
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;作用和AND的差不多，但是支持单独使用&lt;/p&gt;
&lt;h3 id="-减号"&gt;&lt;strong&gt;-（减号）&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;排除该操作符后跟着的搜索条件，如：搜索不包含tom的文档&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-tom
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果类似NOT&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;分组&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;支持使用小括号对每个子句进行分组，形成更为复杂的查询逻辑。&lt;br&gt;
例如：要搜索包含a的文档中，也包含b或者c的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a AND &lt;span style="color:#f92672"&gt;(&lt;/span&gt;b OR c&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也支持在字段中使用小括号。如：要搜索标题中，既包含a也包含b的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;title:&lt;span style="color:#f92672"&gt;(&lt;/span&gt;+a +&lt;span style="color:#e6db74"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;转义字符&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于Lucene中支持很多的符号，如&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+ - &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; ! &lt;span style="color:#f92672"&gt;(&lt;/span&gt; &lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt; ^ &lt;span style="color:#e6db74"&gt;&amp;#34; ~ * ? : \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因此如果需要搜索 (1+1):2 需要对改串进行转换，使用字符\。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;\(&lt;/span&gt;1&lt;span style="color:#ae81ff"&gt;\+&lt;/span&gt;1&lt;span style="color:#ae81ff"&gt;\)\:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考文档：&lt;br&gt;
&lt;a class="link" href="http://www.cnblogs.com/xing901022/p/4974977.html" target="_blank" rel="noopener"
 &gt;http://www.cnblogs.com/xing901022/p/4974977.html&lt;/a&gt;&lt;br&gt;
&lt;a class="link" href="https://segmentfault.com/a/1190000002972420" target="_blank" rel="noopener"
 &gt;https://segmentfault.com/a/1190000002972420&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>