第二章:ElasticSerch 基本概念

ElasticSearch是一个高性能的搜索引擎,采用倒排索引来解决关系型数据库的性能低和功能弱的问题。它创建索引库(相当于数据库)、文档(相当于数据行),并以JSON格式存储数据。倒排索引使得模糊查询和多词搜索变得高效。ElasticSearch还支持分布式、高扩展和实时搜索与数据分析,常用于海量数据搜索、日志分析和数据实时分析。与MySQL对比,ElasticSearch缺少事务,但提供更强大的搜索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

es
是一种搜索引擎软件

搜索就是查询

和关系型数据库对比
如goods 商品表
id    title                       sell_point
1001    华为p30手机黑色     4.5英寸

select  * from goods where title like "%华为%"
1、假如 我们给 title  加上索引   但是like  左边加上 通配符后 索引会失效。意味着 全表扫描 如果有一亿个商品 那么效率很低。

模糊查询可能造成全表扫描

2、select  * from goods where title like "%华为手机%"   这样是查询不出来的,必须要 华为和手机分开查。
但是es就能实现。
关系型数据库功能弱。

那么es是如何解决刚才的 两个问题的 :性能低  功能弱。

1、倒排索引:就是将文本内容进行分词形成词条 然后记录词条和数据的唯一标识的对应关系。
    首先将一段文本按照一定的规则拆分成不同的词条term。
如:床前明月光   拆分为  :床前    明月    光

反向倒排索引
key (词条term)=>value(存储内容)
床=》床前明月光
前=》床前明月光
床前=》床前明月光
明=》床前明月光
月=》床前明月光
明月=》床前明月光
光=》床前明月光
月光=》床前明月光

上面的value(存储内容)数据量很大其实只需要放 id就行了

es 存储数据和搜索原理:

索引库:index 它其实就相当于关系型数据库中的 数据库。
数据叫做文档:document 他就相当于我们关系型数据库中的 表里面的一行一行的数据。

在es中文档的数据结构其实就是json的数据格式

如:{
“id”:"1",
  "title":"华为p30手机",
  “price”:3980.00
}
{
“id”:"2",
  "title":"三星GNX手机",
  “price”:3980.00
}
{
“id”:"3",
  "title":"红米4g手机",
  “price”:3980.00
}

如果 我们需要对 title 进行分词:具体分词规则是什么 是由es来完成的。

形成的倒排索引如下:
key      value
华为     1
p30     1
手机    1,2,3
手    1,2,3
机    1,2,3
三星    2
GNX   2
红米    3
4g     3

index 索引库存储了 文档和 文档分词后的 倒排索引库。

es 搜索:

它是通过 倒排索引 来搜索

如:我们要搜索“手机"这个词
第一步 es会拿着这个 “手机这个词” 去倒排索引中去匹配。

匹配到了 就会根据 对应的id去把文档找到 返回给用户

假设:词条数据量很大  恰好要查询的词条再最后面 怎样处理?查询数据岂不是依然很慢。

es帮我们解决了 那就是 对词条进行排序 形成一个树形的数据结构(请自行补 数据结构算法知识),这样提升词条的 速度。

1、这样 关系型数据中 的查询性能低的问题 es给我们解决了。

2、假如要查询 "华为手机" 这样一个词条呢  这样没有词条匹配 岂不是查询不出来吗?
   
es的解决方案是 先分词 再查询࿱

<think>嗯,用户现在问的是关于cron每天0点执行任务的情况。之前已经介绍过cron的基本概念和时间格式,现在需要更具体地针对每天0点的配置进行说明。 首先,用户可能想知道如何在crontab里设置每天0点运行任务。根据之前的回答,时间格式是五个星号,分别代表分钟、小时、日、月、星期几。每天0点的话,小时应该是0,分钟通常是0,所以表达式应该是0 0 * * *。 接下来,可能需要给出一些例子,比如备份脚本或清理日志的任务,这样用户能更直观地理解应用场景。同时,用户可能对特殊字符串@daily或@midnight感兴趣,这也是每天0点执行的快捷方式,需要提到这些替代写法,方便用户简化配置。 另外,注意事项部分需要再次强调路径问题、权限和日志记录。用户可能在配置时遇到脚本路径错误或者权限不足的问题,所以提醒使用绝对路径和检查权限是有必要的。日志部分可以建议用户添加输出重定向,方便调试。 用户可能的深层需求是确保任务准确执行,避免因为时间设置错误或环境问题导致任务失败。所以需要详细说明时间字段的设置,以及常见问题的解决方法。比如,系统时间是否正确,是否启用了cron服务等。 最后,总结部分可以强调cron在自动化任务中的重要性,特别是在定时备份和日常维护中的应用,帮助用户理解其实际价值。确保回答结构清晰,逐步引导用户完成配置,并提供验证方法,比如查看日志或手动检查任务是否执行。</think>### 定时任务 `cron` 每天 0 点配置详解 #### 1. **基本语法** 若需每天 **0 点(午夜)** 执行任务,`cron` 时间表达式为: ```bash 0 0 * * * <要执行的命令> ``` - **字段解析**: - 分钟:`0`(第 0 分钟) - 小时:`0`(第 0 小时,即 24 小时制的 0:00) - 日、月、星期:`*`(表示每天、每月、无论星期几) --- #### 2. **配置示例** - **每天 0 点执行备份脚本**: ```bash 0 0 * * * /usr/bin/backup_db.sh ``` - **每天 0 点清理日志文件**: ```bash 0 0 * * * /usr/bin/find /var/log -name "*.log" -exec rm {} \; ``` --- #### 3. **快捷写法(特殊字符串)** `cron` 提供别名简化配置,以下两种写法等价于 `0 0 * * *`: ```bash @daily /path/to/script.sh # 每天 0 点执行 @midnight /path/to/script.sh # 同上(部分系统兼容) ``` --- #### 4. **注意事项** 1. **系统时间准确性**: - 确保服务器时区设置为本地时区(如 `Asia/Shanghai`)。 - 使用 `date` 命令检查当前系统时间。 2. **任务验证**: - 通过日志确认任务是否执行: ```bash 0 0 * * * /path/to/task.sh >> /var/log/cron_task.log 2>&1 ``` 3. **环境变量问题**: - 若脚本依赖环境变量(如 `$PATH`),建议在脚本中显式定义或使用绝对路径。 --- #### 5. **常见问题** - **为什么任务未执行?** - 检查 `cron` 服务是否运行:`systemctl status cron`(Linux)。 - 检查脚本权限:`chmod +x /path/to/script.sh`。 - 查看系统日志:`grep CRON /var/log/syslog`(Ubuntu/Debian)。 - **0 点对应的是中午还是午夜?** - `0` 表示午夜(24 小时制的 00:00),`12` 表示中午 12:00。 --- ### 总结 通过 `0 0 * * *` 或 `@daily` 可轻松配置每天午夜自动执行的任务,适用于日志轮转、数据备份等场景。建议结合日志记录和环境检查,确保任务稳定运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值