Einführung
Eine verteilte, leistungsstarke und hochverfügbare Such- und Datenanalyse-Engine, die restful
Stil unterstützt. Es wurde getestet und wird in vielen Großprojekten verwendet. Es eignet sich sehr gut für die Volltextsuche, Protokollanalyse, Überwachungsanalyse usw .api
Einrichtung der Docker-Umgebung
docker network create elastic
docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 -it docker.elastic.co/elasticsearch/elasticsearch:8.3.3
# kibana
docker run --name kib-01 --net elastic -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 docker.elastic.co/kibana/kibana:8.3.3
Docker es-Startfehler:
| ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lin
vim /etc/security/limits.conf
末尾追加
* soft nofile 65536
* hard nofile 65536
vim /etc/sysctl.conf
末尾追加
vm.max_map_count=655360
然后执行
sysctl -p
Referenz: https://blog.csdn.net/ximaiyao1984/article/details/124732596
Docker es Datenspeicherung
usr/share
direkt abgebildet werden können
es
Da es gespeichert werden kann, warum sollten wir eine relationale Datenbank zur Datenspeicherung verwenden (Beispiel: MySQL)?
Kurz gesagt: es
Transaktionen werden nicht unterstützt. In allgemeinen Szenarien wird mysql
+ es
gleichzeitig verwendet mysql
, um die Sicherheit der Originaldaten es
für die Suche zu gewährleisten.
mysql
Nicht für umfangreiche Datenabfragen geeignet
- Die Unterstützung für Fuzzy-Abfragen ist nicht sehr gut. Wenn Sie
LIKE
die Suche verwenden, wird der Index nicht verwendet und das vollständige Scannen der Tabelle verbraucht Leistung. (Beispiel: Ich wollte nach „Sweeping Storm“ suchen, habe aber versehentlichsql
den Satz „Sweeping Storm“ eingegebenLIKE %扫风暴%
und konnte keine Daten finden.) - Das Erstellen zu vieler Indizes kann zu einem Anstieg der Festplattennutzung führen (die ursprüngliche
10G
Datengröße steigt nach der Indexerstellung stark an30G
).
Index
Kartierung
- Unterstützen Sie neue Felder
- Das direkte Löschen/Ändern von Feldern wird nicht unterstützt
- Es unterstützt keine direkte Änderung von Feldtypen. Wenn Sie ein flexibles Design benötigen, bietet ES andere Alternativen, die Neuindizierung verwenden. Allerdings führt die große Datenmenge zu Leistungsproblemen, und es wird empfohlen, bereits in der Entwurfsphase umfassende Kompromisse in Betracht zu ziehen.
- Es wird nicht empfohlen, dynamisch zu verwenden
mapping
(dh das Dokument direkt hinzuzufügen und eses
selbst erstellen zu lassenmapping
).
PUT /my-index-000001
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
Erwägen Sie das Festlegen von Feldern
- Vermeiden Sie die dynamische Erstellung
dynamic
:- true: Standardwert, der das dynamische Hinzufügen neuer Felder ermöglicht
- false: Neue Felder ignorieren
- streng: Es wird ein Fehler gemeldet, wenn neue Felder vorhanden sind
- aktiviert: Felder, die keine Indizierung erfordern, festgelegt aktiviert: falsch
- Schlüsselwort: Genaue Übereinstimmung, kein Text erforderlich, Schlüsselwort erforderlich
So erstellen Sie es
einen Index für
- Importieren Sie nur die Daten, die durchsucht werden müssen, in ES, um zu große Indizes zu vermeiden
- Der genaue Werttyp wird als Schlüsselwort (Mapping-Konfiguration) angegeben und der Begriff Abfrage verwendet
- Vermeiden Sie Routenlose Abfragen: Routenlose Abfragen fragen mehrere Indizes gleichzeitig ab und führen die Ergebnisse zusammen und sortieren sie, was zu einem Anstieg der Cluster-CPU und einer Beeinträchtigung der Stabilität führt.
- Vermeiden Sie Deep-Paging-Abfragen: Bei großen Datenabfragen wird die Verwendung einer Scroll-Abfrage empfohlen.
- Legen Sie eine angemessene Größe des Dateisystem-Cache (Dateisystem-Cache) fest, um die Leistung zu verbessern, da sich die von ES abgefragten Hot-Daten im Dateisystem-Cache befinden
- Definieren Sie Ihre eigene
es
Indexkonfiguration vorabmapping
, verlassen Sie sich nicht aufes
automatisch generiertemapping
- Datenreduzierung: Wenn
json
die Datenbank Feldspalten enthält, müssen Geschäftsfelder daraus extrahiert werden, um verschachtelte Felder zu vermeiden, die Leistung zu verbessern und die Tabelle zu erweitern. - Die Anzahl der ES-Shards kann nach der Erstellung nicht beliebig geändert werden, die Anzahl der Kopien kann jedoch jederzeit erhöht werden, um die maximale QPS zu erhöhen. Wenn der Druck auf einen einzelnen Shard zu hoch ist, muss er erweitert werden.
Der Lebenszyklus des Index kann eingestellt werden
PUT _ilm/policy/log_save_policy
{
"policy": {
"phases": {
"delete": { // 定义删除阶段
"min_age": "365d", // 删除阶段在 365 天后开始
"actions": { // 定义删除动作
"delete": {}
}
}
}
}
}
Daten aktualisieren
Zustandsaktualisierung
POST http://47.105.66.210:9200/article_v1/doc/_update_by_query
{
"script": {
"source":"ctx._source['status']=0;"
},
"query": {
"term": {
"userId": 1
}
}
}
Warum gibt es Datendumps in der Mittelschicht?
Wenn die Menge an Online- DB
Daten groß ist, kann der direkte Zugriff auf die Online-Daten DB
Auswirkungen auf die Serviceleistung haben.
Es gibt nichts, was das Hinzufügen einer mittleren Ebene nicht lösen kann. Wenn dies der Fall ist, fügen Sie eine weitere Ebene hinzu.
Hive wird zum Erstellen von Datendumps verwendet ( mysql
-> es
)
Ähnlichkeitsbewertung
TF-IDF
TF-IDF (Begriffshäufigkeit – inverse Dokumenthäufigkeit), hängt ab von: der Häufigkeit des im Dokument vorkommenden Wortes (TF, Begriffshäufigkeit), je höher es ist, desto relevanter ist es; und der Häufigkeit des Wortvorkommens in Alle Dokumente (IDF, inverse Dokumenthäufigkeit). Je höher sie ist, desto weniger relevant ist sie, was einem allgemeinen Wort entspricht und weniger Einfluss auf die Relevanz hat. Lokal häufig, weltweit selten.
Okapi BM25
Nach 7.x
ist es der Standard-Ähnlichkeitsalgorithmus von es. Der Artikel zur Einführung des Ähnlichkeitsalgorithmus
ähnelt TF-IDF, weist jedoch entsprechende Strafmaßnahmen auf (die Bewertung langer Dokumente wird reduziert usw.).
es ändert die Ähnlichkeitsbewertungsfunktion
curl --request PUT \
--url https://localhost:9200/similarity-score \
--header 'content-type: application/json' \
--data '{
"settings": {
"index": {
"number_of_shards": 1,
"similarity": {
"default": {
"type": "BM25", // 这里也可以选择其他的相似度函数,例:LMDirichlet
"b": 0,
"k1": 10
}
}
}
},
"mappings": {
"properties": {
"text": {
"type": "text"
}
}
}
}'
Verschiedene Felder können unterschiedliche Ähnlichkeitsanpassungsfunktionen festlegen
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"default_field": {
"type": "text"
},
"boolean_sim_field": {
"type": "text",
"similarity": "boolean"
}
}
}
}
'
es
Unterstützte Ähnlichkeitsfunktionen
- Der boolesche Wert erfordert keinen Ähnlichkeitsabgleich und wird nur verwendet, wenn ein vollständiger Abgleich berücksichtigt wird
- DFR-Ähnlichkeit
- DFI-Ähnlichkeit
- IB-Ähnlichkeit
- LM Dirichlet-Ähnlichkeit
- LM Jelinek Mercer Ähnlichkeit
- Einführung in die offizielle Website zur Skriptähnlichkeit (benutzerdefiniert).
Feldlänge normalisierter Wert (Norm)
Die Normalisierung der Feldlängen ist für Volltextsuchen wichtig, und viele andere Felder erfordern keine Normalisierung. Unabhängig davon, ob das Dokument dieses Feld enthält, belegt jedes Zeichenfolgenfeld in jedem Dokument im Index etwa 1 Byte Speicherplatz.
Für einige Anwendungsszenarien wie die Protokollierung sind normalisierte Werte nicht sehr nützlich. Sie müssen sich lediglich darum kümmern, ob das Feld einen speziellen Fehlercode oder eine bestimmte eindeutige Browser-ID enthält. Die Länge des Feldes hat keinen Einfluss auf das Ergebnis und die Deaktivierung der Normalisierung kann viel Speicherplatz sparen.
Offizielle Website-Einführung
Schüttgut
Um Dokumente stapelweise zu erstellen, schauen wir uns zunächst das Beispiel an:
POST _bulk
{"create":{"_index":"es_index_one","_type":"_doc","_id":1}}
{"name":"张三one-1","age":13,"birthday":"2021-10-13","address":"中国上海长宁one-1"}
{"create":{"_index":"es_index_one","_type":"_doc","_id":2}}
{"name":"张三one-2","age":23,"birthday":"2021-10-23","address":"中国上海长宁one-2"}
{"create":{"_index":"es_index_one","_type":"_doc","_id":3}}
{"name":"张三one-3","age":33,"birthday":"2021-10-30","address":"中国上海长宁one-3"}
Zwei Zeilen sind ein Vorgang, die erste Zeile ist der Typ und das Objekt der Operation und die zweite Zeile sind die Daten der Operation.
Die wichtigsten Verben für Operation sind:
- Index erstellen oder aktualisieren
- erstellen erstellen
- Update-Update
- löschen löschen
_bulk Was ist die maximale Datenmenge, die gleichzeitig verarbeitet werden kann?
Die zu verarbeitenden Daten werden massenhaft in den Speicher geladen, daher ist die Datenmenge begrenzt. Die optimale Datenmenge ist kein eindeutiger Wert. Sie hängt von Ihrer Hardware, der Größe und Komplexität Ihres Dokuments, Ihrem Index und der Suchlast ab.
Die allgemeine Empfehlung liegt bei 1000-5000 Dokumenten. Wenn Ihre Dokumente groß sind, können Sie die Warteschlange entsprechend reduzieren. Die empfohlene Größe beträgt 5-15 MB. Der Standardwert darf 100 MB nicht überschreiten. Sie können Elasticsearch in der es-Konfigurationsdatei konfigurieren (d. h , die Konfiguration unter $ES_HOME. yml).
suchen
match_pharse
Phrasensuche und
match
Volltextsuche
multi_match
werden verwendet, um mehrere Felder mit einem Schlüsselwort abzugleichen, und das Bewertungsverhältnis der Felder kann festgelegt werden. Tatsächlich entspricht es einer grammatikalischen Abkürzung
GET kibana_sample_data_ecommerce/_search
{
"query": {
"multi_match": {
"query": "Eddie",
"fields": ["customer_full_name^3","customer_first_name"] # 这里通过^3来指定他的算分比重,这个数字越大,他占的比重就越大,其他字段占得比重就越小
}
},
"_source":["customer_full_name","currency","customer_first_name"]
}
partial matching
ähnlich sql
_like
_source
Geben Sie an, welche Spalten abgefragt werden sollen
Vorschläge zur Suchoptimierung
- Anfangs-, Indexaufbau- und Dokumentqualität
DSL
Die Optimierung erfordert viele Abfragetests, dann das Gruppieren und Anpassen der Gewichtungen. Versuchen Sie, sie nicht anzupassensimilarity
.- Es ist am besten, zu Beginn nicht zu viele Plug-Ins wie Pinyin, Synonyme usw. zu verwenden.
Verwandte Suche
es unterstützt keine Suchvorgänge ähnlich relationalen Datenbanken, sodass Sie die offizielle Website mehrmals durchsuchen müssen.
Referenz
- Warum sollten Sie MySQL zum Speichern von Daten verwenden, wenn Sie es haben?
- Ist MySQL nicht gut? Warum brauchen wir Elasticsearch?
- Wenn Sie MySQL gut nutzen, warum sollten Sie dann zu ES wechseln?
- Ist es möglich, ElasticSearch vollständig anstelle des Datenbankspeichers zu verwenden?
- ES ist sowohl eine Suchmaschine als auch eine Datenbank? Ist es wirklich so allmächtig?
- Unverzichtbar für Architekten: Best Practices für mehrdimensionale Abfragen
- Einführung in die Ähnlichkeitsbewertung in Elasticsearch
- Trockene Informationen | Praktischer Leitfaden zum Design des Elasticsearch-Index
- Es fühlt sich allgemein an und führt in die Erstellung von Indizes ein.
- Können Sie immer noch nicht finden, was Sie suchen? Erfahren Sie mehr über die Optimierung des Suchrankings durch Elasticsearch
andere
-
elastische chinesische Community: https://elasticsearch.cn/
-
es
Bewertung, Sortierung und Wortsegmentierung können individuell angepasst werden. -
Der invertierte Index führt eine Wortsegmentierung, Kleinschreibung usw. basierend auf dem Dokumentinhalt durch und stellt eine Zuordnungsbeziehung zwischen der Wortsegmentierung und dem Dokument her, das die Wortsegmentierung enthält.
-
Das verteilte Architekturdesign migriert Shards automatisch auf neue Knoten. Entsprechende Ergebnisse können auf mehreren Knoten abgefragt und dann integriert werden, wodurch das Problem eines hohen Hardwaredrucks auf einem einzelnen Knoten vermieden und Datenabfragen auf Ebenen problemlos unterstützt werden
PB
. -
mysql
( Binärprotokollbinlog
), Aliscanal
Simulation selbst besteht darin,mysql slave
Daten auszuführendump
. -
otter
Alibabas inkrementeller Datenbank-Log-Parser, ein verteiltes Datenbanksynchronisationssystem. -
Wenn Sie gleichzeitig eine vollständige Aktualisierung und eine inkrementelle Aktualisierung durchführen, müssen Sie auf eine Situation achten: Wenn der vollständige Index ausgeführt wird, werden
mysql
neue Daten hinzugefügt, wodurch die inkrementelle Aktualisierung ausgelöst wird. Wenn die inkrementelle Aktualisierung endet , das vollständige Update Es ist noch nicht abgeschlossen. Wenn das vollständige Update abgeschlossen ist, werden die inkrementell aktualisierten Daten überschrieben. Verarbeitungsmethode: Bei einem vollständigen Update können Sie zunächst das inkrementelle Update anhalten und warten, bis das vollständige Update abgeschlossen ist. -
Wenn Dateneingabefehler
es
auftreten, werden Abhilfemaßnahmen hinzugefügt, die fehlerhaften Daten aufgezeichnet undworker
Aufgaben zur Abfrage von Reparaturen erstellt. -
es
Sie können auch Anfragen stellen , nachdem Sie es erhalten habendb
. Wenn Sie geschäftliche Anforderungen haben, können Sie es selbst in Betracht ziehen. -
Versuchen Sie, Deep-Paging-Abfragen (von + Größe) zu vermeiden, zum Beispiel:
from 10000
,size 10
, Jeder Shard wird auch10010
Ergebnisse finden.OOM
Selbst wenn dies nicht der Fall istOOM
, wirkt es sich möglicherweise auf die BandbreiteCPU
und die Bandbreite usw. aus und beeinträchtigt somit die Leistung des gesamten Cluster. -
ELK
ist das Akronym für drei Open-Source-Projekte:Elasticsearch
, ,Logstash
undKibana
. Elasticsearch ist eine Such- und Analysemaschine. Logstash ist eine serverseitige Datenverarbeitungspipeline, die Daten aus mehreren Quellen gleichzeitig aufnehmen, die Daten umwandeln und sie dann an ein „Repository“ wie Elasticsearch senden kann. Mit Kibana können Benutzer Daten mithilfe von Grafiken und Diagrammen in Elasticsearch visualisieren. ELKB-Elastikstapel. -
OpenSearch Aufgrund einiger Open-Source-Vereinbarungen kündigte AWS den Start des OpenSearch-Projekts an, bei dem es sich um einen Open-Source-Fork von Elasticsearch und Kibana handelt.
-
Das linke Prinzip der relationalen Datenbankindizierung
-
ES
Die leistungsstärkste Abfrage istDSL
-
读写不一致时间在秒级:因为有2个耗时阶段,一是同步阶段将数据从MySQL数据库写入ES,二是ES索引refresh阶段,数据从buffer写入索引后才可查到。
-
初始全量导入,后续增量导入:
Canal+MQ
数据管道同步,不需要或仅需少量代码工作 -
不同的索引可以使用别名来同时查找?(待验证)