索引的理解
2026年3月15日大约 2 分钟
索引创建规则
示例:
1.创建索引(指定 ik 分词器为默认分词器)
curl -X PUT "http://localhost:9200/youhu_system" -H "Content-Type: application/json" -d '
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "ik_max_word"
}
}
}
},
"mappings": {
"properties": {
"title": { "type": "text" }, # 自动用 ik_max_word 分词
"content": { "type": "text" },
"create_time": { "type": "date" }
}
}
}'- 插入一条测试数据
curl -X POST "http://localhost:9200/youhu_system/_doc/1" -H "Content-Type: application/json" -d '
{
"title": "游鹄生态系统架构设计",
"content": "INTJ 架构师打造的游鹄生态系统,代码规范且数据库设计优雅",
"create_time": "2026-03-15"
}'- 测试搜索(验证 ik 分词的检索效果)
curl -X GET "http://localhost:9200/youhu_system/_search" -H "Content-Type: application/json" -d '
{
"query": {
"match": {
"content": "架构师 代码规范"
}
}
}'索引名可以「自定义任意名称」(只要符合命名规则)
ES 对索引名的要求只有几个简单规则:
只能包含小写字母、数字、-、、+
不能以 -、、+ 开头
不能超过 255 个字符
用 youhu_system 完全符合规则,所以 ES 会直接把它当成「新索引名」来创建,就像在数据库里 CREATE DATABASE youhu_system 一样,名字只要合法就能用~
ES 支持「动态创建索引」(不用提前声明)
和 MySQL 必须先 CREATE DATABASE 再用不同,ES 甚至可以「连创建步骤都省了」:
如果直接执行 POST youhu_system/_doc/1 插入数据,ES 会自动创建 youhu_system 索引
手动 PUT youhu_system 是「显式创建」,还能自定义分词器、字段映射,更符合你「规范设计」的要求
示例:
显式创建「游鹄内容检索索引」v1版本,指定IK分词为默认分词器
curl -X PUT "http://localhost:9200/youhu_content_v1" -H "Content-Type: application/json" -d '
{
"settings": {
"number_of_shards": 1, # 单节点先设1个分片,后续扩容再调整
"number_of_replicas": 0,
"analysis": {
"analyzer": {
"default": { "type": "ik_max_word" }, # 全局默认细粒度分词
"default_search": { "type": "ik_smart" } # 搜索时用粗粒度分词
}
}
},
"mappings": {
"properties": {
"title": { "type": "text", "boost": 2 }, # 标题权重更高
"content": { "type": "text" },
"author": { "type": "keyword" }, # 作者名不分词,用于精准匹配
"create_time": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" },
"tags": { "type": "keyword" } # 标签不分词,用于聚合筛选
}
}
}'