**一、是否采用logstash单表导入,然后使用Elasticsearch多表关联**
***
参考博主文章# [干货 | Elasticsearch多表关联设计指南](https://www.cnblogs.com/xiohao/p/12774882.html)
如果采用全部单表导入方案。
>1、一个是维护成本大,涉及十几表。每张表的增删改查都需要同步到es数据库中,单这块开发成本就很高。
2、ES 擅长的是检索,而 MySQL 才擅长关系管理。通过logstash 同步关联数据到ES时,通常会建议:先通过视图对Mysql数据做好多表关联,然后同步视图数据到ES。
3、如果在es做关联查询,那么建立索引数据的时候要用嵌套文档(Nested)存储,很多场景下,使用嵌套文档的复杂度在于索引阶段对关联关系的组织拼装。而且复杂的多表关联查询用es实现起来很复杂,相关资料很少,学习成本高。
4、logstash同步数据是有分页设置,配置后自动的分页导入。另外如果到达千万级别,亿级别的数据导入就不在推荐单独使用ogstash做同步了,应该考虑配合使用消息中间件kafka之类。
5、Nested&Join父子文选型必须考虑`性能问题`。 nested 类型检索使得检索效率慢几倍,父子Join 类型检索会使得检索效率慢几百倍。
**二、使用Elasticsearch实现同段和同句搜索**
***
参考博主文章# [使用Elasticsearch实现同段和同句搜索](https://elasticsearch.cn/article/13677)
>1、同句搜索要求搜索多个关键词时,返回的文章不只要包含关键词,而且这些关键词必须在同一句中。 同段搜素类似,只是范围为同一段落。
2、同段、同句搜索,使用常用的term、match查询,没有找到办法可以实现。SpanQuery常常应用在法律或专利的特定搜索。这些领域,常常提供同段 /同句搜索 。
3、bool查询结合SpanQuery跨度查询,实现复杂的组合查询。
![](http://cloud.ryloo.icu/b8cb59f10f295fe57c44bd1ce9116990)
**三、涉及1对多关联查询时的优化方案**
***
场景:一条法律案例中涉及多个法律法规
>ES 擅长的是检索,而 MySQL 才擅长关系管理。所以可以考虑二者结合,根据第一次查询的结果,第二次查询返回,使用 ES 多索引建立相同的别名,针对别名检索到对应 ID 后再回 MySQL 查询,业务层面通过关联 ID join 出需要的数据。
**四、更改elasticsearch中索引的mapping**
***
参考博主文章# [更改elasticsearch中索引的mapping](https://www.cnblogs.com/sanduzxcvbnm/p/13140141.html)
>首先,elasticsearch 并不支持修改mapping映射字段,无法直接修改,所以需要曲线救国。
**五、es-ik中文分词不精确和不满足法律法规的检索需求**
***
需要完善自定义分词库,然后尝试以下分词:
[# lawa](https://github.com/ShenDezhou/lawa)
[# hlseg Analysis for Elasticsearch](https://github.com/HylandaOpen/elasticsearch-analysis-hlseg)
[# tanford Core NLP Analyzer for Elasticsearch](https://github.com/godlockin/esStanfordNLPAnalyzer)
**六、iptables开放端口号一段时间就失效了**
>iptables -I INPUT 1 -p tcp --dport 5601 -j ACCEPT 一段时间后自动失效了
**七、logstash全量导入数据时出现服务器连接丢失,正在尝试重新连接!**
>清空索引数据,kill -9 port,重新导入,而不是删除索引。
>保证mapping映射类型不用重新建一遍。
```
POST law_advices_v1/_delete_by_query
{
"query":{
"match_all":{
}
}
}
GET law_advices_v1/_mapping
```
**八、# [ES 搜索16 (自定义 _all 字段 copy_to关键字)](https://blog.csdn.net/qq_42383787/article/details/99948150)**
> copy_to 是吧全部字段的值拼接到一个字段里面了,你在单个字段上设置的 boost 肯定没办法起作用的;
如果你希望每个字段权重不同,你可以使用 boolQuery 的多个 should 语句;
每个语句里面使用 matchQuery 或者 multiMatchQuery 来进行匹配,这样你每一个字段的权重都可以进行自定义。
**九、# ElasticSearch中keyword的属性ignore_above详解**
>在[ElasticSearch](https://so.csdn.net/so/search?from=pc_blog_highlight&q=ElasticSearch)中keyword类型字段可以设置ignore_above属性(默认是10) ,表示最大的字段值长度,超出这个长度的字段将不会被索引,但是会存储。
**十、mysql数据库tinyint类型mapping映射不匹配,导致数据导入是错误**
>将mysql数据库tinyint类型修改成smallint类型
**十一、mysql数据库datetime类型数据导入,时间相差5小时**
参考博主文章# [ES时区问题](https://blog.csdn.net/zlfing/article/details/78529849)
>目前全量导入未作处理,查询时加上5小时。而后台实时导入时会报错,做特殊处理转化成UTC格式。
>mysql数据库datetime类型数据如果存在0000-00-00 00:00:00 这种数据,导入会报错。
>除了datetime外,MySQL int类型要对应es long类型,mapping映射时要注意,都需要一一对应。
**十二、批量文档更新**
参考博主文章# [Elasticsearch使用update_by_query](https://blog.csdn.net/feinifi/article/details/100542549)
更新多个文档,index数组传入。修改多个字段,source 用分号分隔字符串传入。
~~~
POST _updateByQuery
{
"index":["law_advices_v1", "law_indictments_v1"],
"body": {
"query": {
"term": {
"user_id": "421"
}
},
"script": {
"source": "ctx._source.user_name=params.user_name;ctx._source.requirements_tags=params.requirements_tags",
"params": {
"user_name":"林小侠",
"requirements_tags": "测试"
}
}
}
}
~~~
**十三、同句同段检索遇到问题**
>获取中文分词结果,用于同句同段的检索。因自定义词汇库不完善和IK分词器还不够强大,按目前的实现方案,同句同段的查询要先做分词后再查询(用户点击同句同段时查询分词结果,赋值到表单中)
跨度查询里span_term,必须命中存入es映射的分词词汇,所以要做分词处理后查询,才能查出来,这方案除了精度问题外,可能还会有其他问题 - -||
时间短促,ES研究不深,或有其他方案。后续优化该部分
**十四、kibana账号密码访问出现forbidden**
>更换elastic用户即可登录
**十五、logstash全量导入数据时,配置config、数据SQL、映射mapping请加上版本号**
>可能存在从其他库突然同步大量的数据过来,这时候为了不影响线上查询,新建不同版本号的索引数据导入es,导入
成功后切换成新的版本数据即可不影响线上查询。
>同时es检索服务api也可以设置版本号
![](http://cloud.ryloo.icu/3eea5325b4d88fa38879f3a1ffbd1cc3)
![](http://cloud.ryloo.icu/c84f18679e914616cdeeb924d7afc901)
**十六、**[elasticsearch log4j 漏洞修复](https://cloud.tencent.com/developer/article/1919553)
参考博主文章 # [elasticsearch log4j 漏洞修复] (https://blog.csdn.net/weixin_43725548/article/details/121922264)
极牛网 # [核弹级漏洞 Apache Log4j2 席卷全球!漏洞详情和修复建议看这里](https://baijiahao.baidu.com/s?id=1718750361348735829&wfr=spider&for=pc)
>北京时间12月9号深夜,Apache Log4j2被曝出一个高危漏洞,攻击者通过jndi注入攻击的形式可以轻松远程执行任何代码。随后官方紧急推出了2.15.0和2.15.0-rc1新版本修复,依然未能完全解决问题,现在已经更新到2.15.0-rc2。该漏洞被命名为Log4Shell,编号CVE-2021-44228,该漏洞CVSS评分达到了满分10分,影响全球一大半的互联网企业,包括百度、苹果等企业都被爆出存在该漏洞,众多媒体将这个漏洞形容成“史诗级”“核弹级”漏洞,可以说相当贴切。
~~~
rpm -aq | grep elasticsearch
sudo find /usr/local -name "*log4j-*.jar"
~~~
![](http://cloud.ryloo.icu/173e7ab24e483fd0451f27b1e9b5d05d)
![](http://cloud.ryloo.icu/82bdc4daaae671075a971c6051eb0f76)
![](http://cloud.ryloo.icu/95134a3f139033ab92e7a5ed36b8a216)
找到对应的文件替换
~~~
vim /usr/local/es/elasticsearch-7.6.2/config/jvm.options
// 加入如下行
-Dlog4j2.formatMsgNoLookups=true
~~~
![](http://cloud.ryloo.icu/72feadd1bfc9dd57cd98848b2c8491b8)
然后重启elasticsearch服务生效
![](http://cloud.ryloo.icu/0b748514bdb6f8a7f8674fc9d7058695)
**十七、分句分段查询时高亮无法显示**
>多字段高亮 使用`require_field_match`开启多个字段高亮
![](http://cloud.ryloo.icu/b7fd62867c82731aa0fbc69f70133d72)
- 前言
- Markdown教程
- ElasticSearch教程
- ElasticSearch7.6.2安装
- Elasticsearch-head安装
- Elasticsearch-IK中文分词器
- ElasticSearch基础入门
- 索引管理
- ElasticSearch深入搜索
- 结构化搜索
- 精确值查找
- 组合过滤器
- 范围查询
- 全文搜索
- 匹配查询
- 组合查询
- 跨度查询
- Logstash教程
- Logstash的安装
- Mysql数据同步到ES
- Kibana教程
- Kibana7.6.2安装
- Cakephp4.x+ElasticSearch7.6.2
- Cakephp4.x的安装和使用
- Elasticsearch-phpSDK的使用
- 安装软件及源码下载
- 使用总结
- elasticsearch 7.2集群安装部署
- 集群的安装部署
- es集群master节点配置组合
- 分片数、副本数分配算法
- 关于集群部署的答疑解惑