底层原理先不说,后面再看。先把搜索总结一下。
curl -XGET http://127.0.0.1:9200/logstash-2015.06.21/testlog/_search?q=first
elasticsearch支持很多搜索形式,但是query语法和kibana后面联系最大,所以总结一下
query语法
- 全文检索:直接写搜索的单词,如 first;
- 单字段的全文检索:在搜索单词之前加上字段名和冒号,比如如果知道单词 first 肯定出现在 mesg 字段,可以写作 mesg:first;
- 单字段的精确检索:在搜索单词前后加双引号,比如 user:"chenlin7";
- 多个检索条件的组合:可以使用 NOT, AND和 OR 来组合检索,注意必须是大写。比如 user:("chenlin7" OR "chenlin") AND NOT mesg:first;
- 字段是否存在:exists:user表示要求 user 字段存在,missing:user表示要求 user 字段不存在;
- 通配符:用 ? 表示单字母,表示任意个字母。比如 fir?t mess;
- 正则:需要比通配符更复杂一点的表达式,可以使用正则。比如 mesg:/mes{2}ages?/。注意 ES 中正则性能很差,而且支持的功能也不是特别强大,尽量不要使用。ES 支持的正则语法见:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax;
- 近似搜索:用 ~
表示搜索单词可能有一两个字母写的不对,请 ES 按照相似度返回结果。比如frist~; - 范围搜索:对数值和时间,ES 都可以使用范围搜索,比如:rtt:>300,date:["now-6h" TO "now"} 等。其中,
[]表示端点数值包含在范围内,{}表示端点数值不包含在范围内;