Elastic Stack:es 索引index入门
一.索引操作
直接put数据 PUT index/_doc/1,es会自动生成索引,并建立动态映射dynamic mapping。
在生产上,我们需要自己手动建立索引和映射,为了更好地管理索引。就像数据库的建表语句一样。
创建索引语法:
1 2 3 4 5 6 7 8 9 10 11 12 | PUT /index { "settings" : { ... any settings ... }, "mappings" : { "properties" : { "field1" : { "type" : "text" } } }, "aliases" : { "default_index" : {} } } |
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | PUT /my_index { "settings" : { "number_of_shards" : 1 , "number_of_replicas" : 1 }, "mappings" : { "properties" : { "field1" :{ "type" : "text" }, "field2" :{ "type" : "text" } } }, "aliases" : { "default_index" : {} } } |
查询索引:
1 2 | GET /my_index/_mapping GET /my_index/_setting |
修改副本数:
1 2 3 4 5 6 | PUT /my_index/_settings { "index" : { "number_of_replicas" : 2 } } |
删除索引:
DELETE /my_index
DELETE /my_index*
为了安全起见,防止恶意删除索引,删除时必须指定索引名:在elasticsearch.yml配置:action.destructive_requires_name: true
二.定制分词器
默认分词器:
standard
分词三个组件:
character filter:在一段文本进行分词之前,先进行预处理
tokenizer:分词
token filter:对词标准化,lowercase,stop word,synonymom
standard tokenizer:以单词边界进行切分
standard token filter:什么都不做
lowercase token filter:将所有字母转换为小写
启用english停用词token filter
1 2 3 4 5 6 7 8 9 10 11 12 13 | PUT /my_index { "settings" : { "analysis" : { "analyzer" : { "es_std" : { "type" : "standard" , "stopwords" : "_english_" } } } } } |
定制化自己的分词器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | PUT /my_index { "settings" : { "analysis" : { "char_filter" : { "&_to_and" : { "type" : "mapping" , "mappings" : [ "&=> and" ] } }, "filter" : { "my_stopwords" : { "type" : "stop" , "stopwords" : [ "the" , "a" ] } }, "analyzer" : { "my_analyzer" : { "type" : "custom" ,<br> #三个组件都可以定制 "char_filter" : [ "html_strip" , "&_to_and" ], "tokenizer" : "standard" , "filter" : [ "lowercase" , "my_stopwords" ] } } } } } |
三.定制dynamic mapping
true:遇到陌生字段,就进行dynamic mapping
false:新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍将出现在返回点击的源字段中。这些字段不会添加到映射中,必须显式添加新字段。
strict:遇到陌生字段,就报错
创建mapping时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PUT /my_index { "mappings" : { "dynamic" : "strict" , "properties" : { "title" : { "type" : "text" }, "address" : { "type" : "object" , "dynamic" : "true" } } } } |
date_detection:日期探测,默认会按照一定格式识别date,yyyy-MM-dd,如果有需要,自己手动指定某个field为date类型
numeric_detection:数字探测,默认不开启
定制自己的dynamic mapping template:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | PUT /my_index { "mappings" : { "dynamic_templates" : [ { "en" : { "match" : "*_en" , "match_mapping_type" : "string" , "mapping" : { "type" : "text" , "analyzer" : "english" } } } ] } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix