FILEBEAT+ELK日志收集平台搭建流程 (12)

使用 GET 方法,直接请求/Index/Type/_search,就会返回所有记录。

$ curl 'localhost:9200/accounts/person/_search' {   "took":2,   "timed_out":false,   "_shards":{"total":5,"successful":5,"failed":0},   "hits":{     "total":2,     "max_score":1.0,     "hits":[       {         "_index":"accounts",         "_type":"person",         "_id":"AV3qGfrC6jMbsbXb6k1p",         "_score":1.0,         "_source": {           "user": "李四",           "title": "工程师",           "desc": "系统管理"         }       },       {         "_index":"accounts",         "_type":"person",         "_id":"1",         "_score":1.0,         "_source": {           "user" : "张三",           "title" : "工程师",           "desc" : "数据库管理,软件开发"         }       }     ]   } }

上面代码中,返回结果的 took字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,里面子字段的含义如下。

§ total:返回记录数,本例是2条。

§ max_score:最高的匹配程度,本例是1.0。

§ hits:返回的记录组成的数组。

返回的记录中,每条记录都有一个_score字段,表示匹配的程序,默认是按照这个字段降序排列。

6.2 全文搜索

Elastic 的查询非常特别,使用自己的查询语法,要求 GET 请求带有数据体。

  $ curl 'localhost:9200/accounts/person/_search'  -d ' {   "query" : { "match" : { "desc" : "软件" }} }'

上面代码使用 Match查询,指定的匹配条件是desc字段里面包含"软件"这个词。返回结果如下。

  {   "took":3,   "timed_out":false,   "_shards":{"total":5,"successful":5,"failed":0},   "hits":{     "total":1,     "max_score":0.28582606,     "hits":[       {         "_index":"accounts",         "_type":"person",         "_id":"1",         "_score":0.28582606,         "_source": {           "user" : "张三",           "title" : "工程师",           "desc" : "数据库管理,软件开发"         }       }     ]   } }

Elastic 默认一次返回10条结果,可以通过size字段改变这个设置。

  $ curl 'localhost:9200/accounts/person/_search'  -d ' {   "query" : { "match" : { "desc" : "管理" }},   "size": 1 }'

上面代码指定,每次只返回一条结果。

还可以通过from字段,指定位移。

  $ curl 'localhost:9200/accounts/person/_search'  -d ' {   "query" : { "match" : { "desc" : "管理" }},   "from": 1,   "size": 1 }'

上面代码指定,从位置1开始(默认是从位置0开始),只返回一条结果。

6.3 逻辑运算

如果有多个搜索关键字, Elastic 认为它们是or关系。

  $ curl 'localhost:9200/accounts/person/_search'  -d ' {   "query" : { "match" : { "desc" : "软件 系统" }} }'

上面代码搜索的是软件 or 系统。

如果要执行多个关键词的and搜索,必须使用布尔查询。

  $ curl 'localhost:9200/accounts/person/_search'  -d ' {   "query": {     "bool": {       "must": [         { "match": { "desc": "软件" } },         { "match": { "desc": "系统" } }       ]     }   } }'

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjxdz.html