elasticsearch 学习

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
elasticsearch 学习 https://www.cnblogs.com/qdhxhz/p/11493677.html
    es 基础概念:
        索引index: 案由相同属性的文档集合
        类型type: 索引可以定义一个或多个类型,文档必须属于一个类型
        文档document: 文档是可以被索引的基本数据单位
        3者的关系类似(索引=数据库,类型=表,文档=数据)
        分片: 每个索引都有多个分片,每个分片都是一个Lucene索引 (如果一个索引量很大,就需要分片)
        备份: 拷贝一份分片就完成了分片的备份
    es API
        api基本格式: http:// <ip>:<port>/<索引>/<类型>/<文档id>
        常用http动作词: GET/PUT/POST/DELETE
    es 基本用法:
        非结构化创建: 关键词 mappings:{} 空数据就是非结构化
        结构化创建: (注: 7.x 移除type类型 都统一改为_doc)
            {
                "settings": {
                    "number_of_shards": 3,
                    "number_of_replicas": 1
                },
                "mappings": {
                    "properties": {
                        "name": {
                            "type": "text"
                        },
                        "country": {
                            "type": "keyword"
                        },
                        "age": {
                            "type": "integer"
                        },
                        "date": {
                            "type": "date",
                            "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                        }
                    }
                }
            }
        插入 post:
            指定文档Id插入
                url: http://127.0.0.1:9200/people/_doc/1
                {
                    "name": "wali2",
                    "age": 40,
                    "country": "china",
                    "date": "2021-03-16"
                }
            自动产生文档id插入
                url: http://127.0.0.1:9200/people/_doc/
                {
                    "name": "wali2",
                    "age": 40,
                    "country": "china",
                    "date": "2021-03-16"
                }
        修改 post put:
            直接修改文档:
                url: http://127.0.0.1:9200/people/_doc/1/_update
                {
                    "doc": {
                        "name": "谁是瓦力"
                    }
                }
            脚本修改文档:
                url: http://127.0.0.1:9200/people/_doc/1/_update
                {
                    "_index": "people",
                    "_type": "_doc",
                    "_id": "1",
                    "_version": 5,
                    "result": "updated",
                    "_shards": {
                        "total": 2,
                        "successful": 2,
                        "failed": 0
                    },
                    "_seq_no": 5,
                    "_primary_term": 1
                }
        删除 delete:
            删除文档 请求方式:
                http://127.0.0.1:9200/people/_doc/1
            删除索引(也会删除数据)
                http://127.0.0.1:9200/book
        查询:
            简单查询 get:
                http://127.0.0.1:9200/people/_doc/CzNtOXgB1o6hJzpfqHGJ
                _cat/count/people?v 查看数据条数
            条件查询 post/get, 关键词query:
                http://127.0.0.1:9200/people/_doc/_search
                1.{
                    "query": {
                        "match_all": {} 返回全部数据
                    },
                    "from": 1, 起始返回数据
                    "size": 1  返回数据条数
                }
                2.{
                    "query": {
                        "match": {
                            "name": "wali2" 查询name包含wali2的数据
                        }
                    }
                }
                排序等.
            聚合查询,关键词 aggs:
            http://127.0.0.1:9200/people/_doc/_search
            {
                "aggs": {
                    "自定义聚合名称": {
                        "terms": {
                            "field": "age" 列名
                        }
                    }
                }
            }
            计算
            {
                "aggs": {
                    "xxx": {
                        "stats": { min max
                            "field": "age"
                        }
                    }
                }
            }
        高级查询:
            子条件查询: 特定字段查询特定值
                Query context
                    全文本查询 针对文本类型数据
                        模糊匹配(会查询ElasticSearch,入门两个关键词)
                            {
                                "query": {
                                    "match": {
                                        "title": "ElasticSearch入门"
                                    }
                                }
                            }
                        习语匹配
                            把 match 改成 match_phrase 只查询 ElasticSearch入门
                        多个字段匹配
                            {
                                "query": {
                                    "multi_match": {
                                        "query": "瓦力",
                                        "fields": ["author", "title"] 这两个字段中包含"瓦力"的
                                    }
                                }
                            }
                        语法查询
                            查询包含 ElasticSearch 打发 / Python 的数据
                            {
                                "query": {
                                    "query_string": {
                                        "query": "(ElasticSearch AND 打发) OR Python"
                                    }
                                }
                            }
                            查询"author", "title"中包含瓦力 或者 xxx
                            {
                                "query": {
                                    "query_string": {
                                        "query": "瓦力 OR xxx",
                                        "fields": ["author", "title"]
                                    }
                                }
                            }
                    字段级别查询 针对结构化数据,如数字,日期等
                        { 查询年龄100的
                            "query": {
                                "term": {
                                    "age": 100
                                }
                            }
                        }
                        { 查询年龄大于10 且 小于200的数据(e 是等于包含)
                            "query": {
                                "range": {
                                    "age": {
                                        "get": 10,
                                        "lte": 200
                                    }
                                }
                            }
                        }
                Filter context : 在查询中,只判断该文档是否满足条件,只有yes,no
                    {
                        "query": {
                            "bool": {
                                "filter": {
                                    "term": {
                                        "age": 100
                                    }
                                }
                            }
                        }
                    }
 
            复合条件查询: 以一定的逻辑组合子条件查询
 
elasticsearch 目录结构:
    bin 启动文件目录
    config  配置文件目录
        elasticsearch.yml
            # elasticsearch 和 head 可视化插件跨域问题 (启动不显示es)
            http.cors.enabled: true
            http.cors.allow-origin: "*"
            # 集群配置
            cluster.name: wali # 集群名字(集群名称是一样的)
            node.name: master # 节点名称
            node.master: true # master指挥官主节点
            # 设置主机ip
            network.host: 127.0.0.1
            # 端口
            http.port: 8200
            # 设置主节点ip(就是主节点指挥官的ip)
            discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    lib 第三方库目录
    modules 模块目录
    plugins 第三方插件目录
        head 插件(可视化插件):
            颜色: 绿色(健康) 黄色(不健康) 红色(很差)

  

posted @   qukaige  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示