我是ELK的新手。我想根据字段中单词出现的顺序搜索文档。例如,
在doc1,my_field:" MY FOO WORD BAR EXAMPLE"
在doc2,my_field:" MY BAR WORD FOO EXAMPLE"
我想在Kibana查询文件,其中" FOO"之后是" BAR"而不是相反。所以,我希望doc1在这种情况下返回而不是doc2。 我尝试在Kibana搜索中使用以下查询。但是,它不起作用。此查询甚至不会生成任何搜索结果。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section id='gallery'>
<img src='http://placehold.it/75x100/000/fff?text=1' class='off'>
<img src='http://placehold.it/75x100/00f/eee?text=2' class='off'>
<img src='http://placehold.it/75x100/0e0/111?text=3' class='off'>
<img src='http://placehold.it/75x100/f00/fff?text=4' class='off'>
<img src='http://placehold.it/75x100/fc0/000?text=5' class='off'>
<img src='http://placehold.it/75x100/fff/000?text=6' class='off'>
</section>
<fieldset>
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
<button>6</button>
</fieldset>
我也试过了分析字段(只是my_field.raw:/.*FOO.*BAR.*/
),虽然我知道这不应该有效。当然,这也没有产生任何结果。
请帮我这个正则表达式搜索。为什么我没有得到该查询的任何匹配结果?
答案 0 :(得分:1)
我不确定为什么正则表达式查询不起作用但我相信Kibana正在使用Elasticsearch的查询字符串查询记录here所以例如你可以做一个短语查询(在链接中记录)通过将您的搜索放在双引号中,它将查找单词&#34; foo&#34;然后是&#34; bar&#34;。这样做也会更好,因为你会在你的分析字段(my_field)上执行此操作,它会对每个单词进行标记,以执行快速查找。所以你在Kibana搜索会是:
my_field:&#34; FOO BAR&#34;
更新:
看起来这是一个恼人的Kibana怪癖(可能出于向后兼容的原因)。无论如何,这并不适合您,因为您正在搜索未分析的字段,显然Kibana默认情况下会降低搜索范围,因此它不会匹配未分析的大写字母&#34 ; FOO&#34 ;.您可以在提及here的Kibana高级设置中对此进行配置,特别是通过设置配置选项&#34; lowercase_expanded_terms&#34;为假。
答案 1 :(得分:0)
Kibana的标准查询语言基于Lucene query syntax。
默认分析器会将文本标记为不同的词:[MY,FOO,WORD,BAR,EXAMPLE]
您可以在Kibana中尝试以下搜索字符串,而不是使用正则表达式匹配:
my_field: FOO AND my_field: BAR
如果您的“ my_field”数据看起来像“ MYFOOWORDBAREXAMPLE”(无法被标记化),则应使用查询字符串:
my_field: *FOO*BAR*
答案 2 :(得分:0)
GET /_search
{
"query": {
"regexp": {
"user": {
"value": "k.*y",
"flags" : "ALL",
"max_determinized_states": 10000,
"rewrite": "constant_score"
}
}
}
}
有关here的详细信息