(八)ElasticSearch常用查询语法

简单查询、条件查询、聚合查询
(1)创建book索引

代码:
{
	"settings":{
		"number_of_shards":3,
		"number_of_replicas":1
	},
	"mappings":{
		"novel":{
			"properties":{
				"word_count":{
					"type":"integer"
				},
				"author":{
					"type":"keyword"
				},
				"title":{
					"type":"text"
				},
				"publish_date":{
					"type":"date",
					"format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
				}
			}
			
		}
	}
}
(2)插入数据

(3)GET请求,查询id为1数据

(4)条件查询

结果:

(5)指定返回数据大小,以及从哪里返回

结果:

(6)按关键词查询以及排序

结果:

(7)聚合查询

结果:


7-1)聚合中的计算:

结果:

7-2)直接指定最小值

结果:

<think>嗯,用户之前已经问过Elasticsearch的好处,现在想了解常用语法。可能他们正在学习如何使用ES,或者需要具体操作上的指导。我需要先确定用户的使用场景,是开发人员还是数据分析师?可能他们需要实际的查询示例来应用到项目中。 首先,用户可能对基本的数据操作感兴趣,比如索引创建、增删改查。然后,查询部分肯定是重点,包括各种查询类型,比如term、match、bool组合查询。还有聚合分析,这部分对于数据分析很重要。 要注意用户可能不太熟悉ES的复杂语法,所以需要用简单明了的例子来解释每个部分。比如,如何创建索引,插入文档,然后不同类型的查询。还要强调常用参数,比如分页、排序,这些在实际使用中很常见。 另外,用户可能想知道如何优化查询,比如过滤和性能相关的建议。还有可能的高级用法,比如嵌套查询或者地理位置查询,但需要先确保覆盖基础内容。 需要检查之前的回答是否涉及过语法部分,避免重复。之前介绍了ES的优势和应用场景,现在需要深入语法细节。可能用户接下来会进行实际操作,所以示例要准确,并且符合他们提到的中文分词需求,比如ik分词器的使用。 最后,提醒注意事项,比如避免通配符查询,分页深度限制,这些是常见陷阱。确保回答结构清晰,分点列出,方便用户逐步学习。可能还需要提供进一步的帮助,比如是否需要更详细的案例或特定场景的语法。</think>以下是Elasticsearch常用语法及核心操作示例,按功能分类整理: --- ### 一、索引管理 #### 1. 创建索引 ```json PUT /my_index { "settings": { "number_of_shards": 3, // 主分片数 "number_of_replicas": 1 // 每个分片的副本数 }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "ik_max_word" }, // 中文分词 "price": { "type": "double" }, "tags": { "type": "keyword" }, // 精确值(不分词) "created_at": { "type": "date" } } } } ``` #### 2. 删除索引 ```json DELETE /my_index ``` --- ### 二、文档操作 #### 1. 插入/更新文档 ```json POST /my_index/_doc/1 // 指定ID=1 { "title": "Elasticsearch入门指南", "price": 49.9, "tags": ["技术", "数据库"], "created_at": "2023-10-01" } ``` #### 2. 批量操作(Bulk API) ```json POST _bulk { "index" : { "_index" : "my_index", "_id" : "2" } } { "title": "分布式系统设计", "price": 99.0 } { "delete" : { "_index" : "my_index", "_id" : "1" } } ``` --- ### 三、查询语法 #### 1. 基础查询 - **匹配所有文档**: ```json GET /my_index/_search { "query": { "match_all": {} } } ``` - **精确匹配(term查询)**: ```json { "query": { "term": { "tags": "技术" } // 搜索`tags`字段包含"技术"的文档 } } ``` #### 2. 全文搜索(match查询) ```json { "query": { "match": { "title": { "query": "搜索引擎原理", // 会被分词为"搜索"、"引擎"、"原理" "operator": "and" // 必须包含所有分词(默认为or) } } } } ``` #### 3. 多条件组合(bool查询) ```json { "query": { "bool": { "must": [ // 必须满足 { "match": { "title": "系统" } } ], "should": [ // 满足任意条件可加分 { "term": { "tags": "数据库" } }, { "range": { "price": { "gte": 50 } } } ], "must_not": { "term": { "status": "下架" } } // 排除条件 } } } ``` #### 4. 范围查询(range) ```json { "query": { "range": { "price": { "gte": 30, "lte": 100 } // 30 ≤ price ≤ 100 } } } ``` --- ### 四、聚合分析 #### 1. 分组统计(terms聚合) ```json { "size": 0, // 不返回原始文档 "aggs": { "tag_counts": { "terms": { "field": "tags", "size": 10 } // 统计前10个tag的出现次数 } } } ``` #### 2. 数值统计(metrics聚合) ```json { "aggs": { "price_stats": { "stats": { "field": "price" } // 返回count/min/max/avg/sum } } } ``` --- ### 五、排序与分页 ```json { "query": { "match_all": {} }, "sort": [ { "price": { "order": "desc" } }, // 按价格降序 "_score" // 其次按相关性得分排序 ], "from": 10, // 从第10条开始(类似SQL的OFFSET) "size": 5 // 返回5条结果 } ``` --- ### 六、高级功能 #### 1. 高亮显示 ```json { "query": { "match": { "title": "指南" } }, "highlight": { "fields": { "title": { "pre_tags": [""], "post_tags": [""] } } } } ``` #### 2. 模糊查询(fuzzy) ```json { "query": { "fuzzy": { "title": { "value": "elastc", // 允许拼写错误(自动修正为"elastic") "fuzziness": "AUTO" // 根据词长自动决定允许的编辑距离 } } } } ``` --- ### 七、常用参数 | 参数 | 说明 | 示例值 | |---------------|-------------------------------|---------------------| | `_source` | 控制返回字段 | `"_source": ["title", "price"]` | | `explain` | 显示相关性得分计算细节 | `"explain": true` | | `track_total_hits` | 精确统计总命中数 | `"track_total_hits": true` | --- ### 注意事项 1. **避免深分页**:`from + size` 超过10,000时改用`search_after` 2. **过滤与查询分离**:将不参与相关性评分的条件放入`filter`(性能更优) 3. **索引模板**:对日志类数据建议使用`Index Template`自动管理索引结构 如果需要具体场景的语法示例(如地理位置查询、嵌套文档操作等),可以进一步说明需求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值