ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## Elasticsearch **author:xiak** **last update: 2022-10-15 10:12:22** ---- [TOC=3,8] ---- ### 索引的概念 #### doc 文档 1. 小布爱吃瓜子 2. 小布好强势,抢瓜子吃 3. 小布是一只布丁仓鼠 4. 金丝熊不是熊 https://hanlp.hankcs.com/demos/tok.html?text=%E5%B0%8F%E5%B8%83%E6%98%AF%E4%B8%80%E5%8F%AA%E5%B8%83%E4%B8%81%E4%BB%93%E9%BC%A0&v1=true&coarse=true ---- #### 正排索引 每个文档有哪些关键词 (文档 > 关键词) | doc | keywords | |--|--| |doc1| 小布, 爱, 吃, 爱吃, 瓜子| |doc2| 小布, 好, 强势, 抢, 瓜子, 吃| |doc3| 小布, 是, 布丁, 仓鼠, 布丁仓鼠| |doc4| 金丝熊, 不, 是, 不是, 熊| ---- #### 倒排索引 每个关键词出现在哪些文档 (关键词 > 文档) | keyword | docs | |--|--| |小布| doc1, doc2, doc3| |爱| doc1| |吃| doc1, doc2| |爱吃| doc1| |瓜子| doc1, doc2| |好| doc2| |强势| doc2| |抢| doc2| |布丁| doc3| |仓鼠| doc3| |布丁仓鼠| doc3| |金丝熊| doc4| |不| doc4| |是| doc3, doc4| |不是| doc4| |熊| doc4| ---- ### 查询方式 1. termquery 关键字查询 2. phrase 短语查询 3. boolean 布尔查询 4. range 区间查询 5. boosting 加权查询 6. wildcard 通配符查询 (类似 like "_{$keyword}%") 7. fuzzy 模糊查询 (proximity 邻近查询) 8. spatial 地理位置查询 9. prospective search (订阅查询) https://www.kancloud.cn/wizardforcel/mastering-elasticsearch/147126 ---- ### 特殊字符 如果在搜索关键词中出现了如下18个字符中的任意一个字符,就需要用反斜杠`\`进行转义,例如,查询关键词 `abc"efg` 就需要转义成 `abc\"efg`。 `+`, `-`, `&`, `|`, `!`, `(`, `)`, `{`, `}`, `[`, `]`, `^`, `"`, `~`, `*`, `?`, `:`, `\`, `/` ---- query term 字符、词、短语 通配搜索 模糊搜索 ---- ### RESTful API ```shell curl -i -XGET 'http://127.0.0.1:9200/_count?pretty' -d '{ "query": { "match_all": {} }}' -H "Content-Type: application/json" ``` ---- [基础入门 | Elasticsearch: 权威指南 | Elastic - 互联网笔记](http://www.lvesu.com/blog/es/getting-started.html) > 如果你现在打开这本书,是因为你拥有数据。除非你准备使用它做些什么,否则拥有这些数据将没有意义。 **不幸的是,大部分数据库在从你的数据中提取可用知识时出乎意料的低效。当然,你可以通过时间戳或精确值进行过滤,但是它们能够进行全文检索、处理同义词、通过相关性给文档评分么? 它们从同样的数据中生成分析与聚合数据吗?最重要的是,它们能实时地做到上面的那些而不经过大型批处理的任务么?** 这就是 Elasticsearch 脱颖而出的地方:Elasticsearch 鼓励你去探索与利用数据,而不是因为查询数据太困难,就让它们烂在数据仓库里面。 [添加索引 | Elasticsearch: 权威指南 | Elastic - 互联网笔记](http://www.lvesu.com/blog/es/_add-an-index.html) > 集群的健康状况为`yellow`则表示全部主分片都正常运行(集群可以正常服务所有请求),但是*副本*分片没有全部处在正常状态。 实际上,所有3个副本分片都是`unassigned`—— 它们都没有被分配到任何节点。 **在同一个节点上既保存原始数据又保存副本是没有意义的,因为一旦失去了那个节点,我们也将丢失该节点上的所有副本数据。** 当前我们的集群是正常运行的,但是在硬件故障时有丢失数据的风险。 [Elasticsearch 在各大互联网公司大量真实的应用案例!](https://baijiahao.baidu.com/s?id=1708767125326104870&wfr=spider&for=pc) > 原来采用的热表分库方式,即将最近6个月的订单的放置在一张表中,将历史订单放在在history表中。history表存储全量的数据,当用户查询的下单时间跨度超过6个月即查询历史订单表,此分表方式热表的数据量为4000w左右,当时能解决的问题。但是显然不能满足携程艺龙订单接入的需求。 > > 滴滴几乎所有写入 Elasticsearch 的数据都是经由 kafka 消费入到 Elasticsearch。kafka 的数据包括业务 log 数据、mysql binlog 数据和业务自主上报的数据,Sink 服务将这些数据实时消费入到 Elasticsearch。 [社区电台第七期:Elastic 在今日头条广告系统中的大规模应用 - 知乎](https://zhuanlan.zhihu.com/p/50819769) [Mastering Elasticsearch 中文版 · 看云](https://www.kancloud.cn/wizardforcel/mastering-elasticsearch/147120) [java - mysql一千万的数据量如何一秒内实现模糊搜索? - SegmentFault 思否](https://segmentfault.com/q/1010000042572439?utm_source=sf-similar-question) [java - mysql 倒排索引为什么没人用? - SegmentFault 思否](https://segmentfault.com/q/1010000042632919?utm_source=sf-similar-question) [可否完全使用ElasticSearch代替数据库存储?](https://baijiahao.baidu.com/s?id=1721820719672976775&wfr=spider&for=pc) [Elastic Search 入门 - 知乎](https://zhuanlan.zhihu.com/p/458011982)