**一、是否采用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跨度查詢,實現復雜的組合查詢。

**三、涉及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也可以設置版本號


**十六、**[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"
~~~



找到對應的文件替換
~~~
vim /usr/local/es/elasticsearch-7.6.2/config/jvm.options
// 加入如下行
-Dlog4j2.formatMsgNoLookups=true
~~~

然后重啟elasticsearch服務生效

**十七、分句分段查詢時高亮無法顯示**
>多字段高亮 使用`require_field_match`開啟多個字段高亮

- 前言
- 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節點配置組合
- 分片數、副本數分配算法
- 關于集群部署的答疑解惑