其他分享
首页 > 其他分享> > Elasticsearch概念及查询语法

Elasticsearch概念及查询语法

作者:互联网

Elasticsearch概念及查询语法

ES 是使用 Java 编写的一种开源搜索引擎,它在内部使用 Lucene 做索引与搜索,通过对 Lucene 的封装,隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。

它可以被下面这样准确的形容:

一个分布式的实时文档存储,每个字段可以被索引与搜索。
一个分布式实时分析搜索引擎。
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。

官网对 Elasticsearch 的介绍是 Elasticsearch 是一个分布式、可扩展、近实时的搜索与数据分析引擎。

1 、Es查询字符串检索

1.1 查看索引列表

http://xx.xx.xxx.xx:9200/_cat/indices

1.2 查某个索引内的所有数据

例如:查indicator_ip内所有数据:

http://xx.xx.xxx.xx:9200/indicator_ip/_search?q=*

1.3 Pretty:按照json格式输出

http://xx.xx.xxx.xx:9200/indicator_ip/_search?q=*&pretty

1.4 Sort:指定字段排序

例如:indicator_ip内的数据按modified排序

http://xx.xx.xxx.xx:9200/indicator_ip/_search?sort=modified:desc&pretty

1.5 *values:模糊搜索某个字段包含values的数据

例如:查indicator_ip内values字段值包含61.161的所有数据

http://xx.xx.xxx.xx:9200/indicator_ip/_search?q=values:*61.161&pretty

1.6 _source:只输出指定字段

例如:只输出indicator_ip内modified字段

http://xx.xx.xxx.xx:9200/indicator_ip/_search?_source=modified&pretty

1.7 组合查询

例如:查询indicator_ip内threat_level为1 并且 threat_types为9的数据

http://xx.xx.xxx.xx:9200/indicator_ip/_search?q=threat_level:1 AND threat_types:9&pretty

1.8 范围查询

例如:查询indicator_ip内threat_level取值1-5之间的数据,不包含1,5

http://xx.xx.xxx.xx:9200/indicator_ip/_search?q=threat_level:{1 TO 5}&pretty

2、 ES结构化检索

推荐火狐es插件: Elasticvue
推荐谷歌es插件: ElasticSearch Head

2.1 term 过滤

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型):

{ “term”: { “age”: 26 }}
{ “term”: { “date”: “2014-09-01” }}
{ “term”: { “public”: true }}
{ “term”: { “tag”: “full_text” }}

例如:查询indicator_ip内threat_level取值为1 的数据:

{ 
  "query": { 
    "term": { 
      "hostname": "xxx" 
    } 
  } 
}

2.2 terms 过滤

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:
模板:

{ "terms": { 
    "tag": [ "search", "full_text", "nosql" ] 
    } 
}

例如:查询indicator_ip内threat_level取值为1,3,5 的数据

{ 
  "query": { 
    "terms": { 
      "threat_level": [1,3,5] 
    } 
  } 
}

2.3 range 过滤

range过滤允许我们按照指定范围查找一批数据:
范围操作符包括:
gt : 大于
gte: 大于等于
lt : 小于
lte: 小于等于
例如:查询indicator_ip索引内modified值为当前时间和2021年11月17日0点之间 的数据

{
	"query": {
		"range": {
			"modified": {
			    "gt":"2021-11-17T00:00:00.000Z",
			    "lt":"now"
			}
		}
	},
	"size": 10,
	"from": 0,
	"sort": []
}

2.4 bool过滤、联合查询must,should,must_not,filter**

bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:
must : 多个查询条件的完全匹配,相当于 and。
must_not : 多个查询条件的相反匹配,相当于 not。
should : 至少有一个查询条件匹配, 相当于 or。filter: 作用与must一直,不过must会有评分,而filter仅仅只是过滤,所以性能更高bool: 下一层级可以包含must,should,must_not,filter,当bool的的下一层级(must,should,must_not,filter)都返回true,则当前bool返回true(返回true表示当前条件匹配)
例如:查询indicator_ip表中threat_level为1、modified在当前和2021年11月15日时间范围内 且confidence为80 或者credit_level为1 的数据

{
	"query": {
		"bool": {
			"must": [
				{
					"term": {
						"threat_level": 1
					}
				},
				{
					"range": {
						"modified": {
							"gt": "2021-11-15T06:27:11.000Z",
							"lt": "now"
						}
					}
				},
				{
					"bool": {
						"should": [
							{
								"term": {
									"confidence": 80
								}
							},
							{
								"term": {
									"credit_level": 1
								}
							}
						]
					}
				}
			]
		}
	},
	"size": 10,
	"from": 0,
	"sort": []
}

注意should无法与另外三个并列使用,如果并列使用,should会失效

标签:indicator,level,ip,term,查询,语法,xx,Elasticsearch,threat
来源: https://blog.csdn.net/qq_45481507/article/details/121556195