es Erste Einführung in die Forschung, Zusammenfassung relevanter Wissenspunkte

Einführung

Eine verteilte, leistungsstarke und hochverfügbare Such- und Datenanalyse-Engine, die restfulStil 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/sharedirekt abgebildet werden können

esDa es gespeichert werden kann, warum sollten wir eine relationale Datenbank zur Datenspeicherung verwenden (Beispiel: MySQL)?

Kurz gesagt: esTransaktionen werden nicht unterstützt. In allgemeinen Szenarien wird mysql+ esgleichzeitig verwendet mysql, um die Sicherheit der Originaldaten esfür die Suche zu gewährleisten.

mysqlNicht für umfangreiche Datenabfragen geeignet

  1. Die Unterstützung für Fuzzy-Abfragen ist nicht sehr gut. Wenn Sie LIKEdie 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 versehentlich sqlden Satz „Sweeping Storm“ eingegeben LIKE %扫风暴%und konnte keine Daten finden.)
  2. Das Erstellen zu vieler Indizes kann zu einem Anstieg der Festplattennutzung führen (die ursprüngliche 10GDatengröße steigt nach der Indexerstellung stark an 30G).

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 es esselbst erstellen zu lassen mapping).
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 eseinen 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 esIndexkonfiguration vorab mapping, verlassen Sie sich nicht auf esautomatisch generiertemapping
  • Datenreduzierung: Wenn jsondie 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- DBDaten groß ist, kann der direkte Zugriff auf die Online-Daten DBAuswirkungen 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" 
      }
    }
  }
}
'

esUnterstü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_pharsePhrasensuche und
matchVolltextsuche
multi_matchwerden 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

_sourceGeben Sie an, welche Spalten abgefragt werden sollen

Anpassbare Suchvorlagen

Vorschläge zur Suchoptimierung

  1. Anfangs-, Indexaufbau- und Dokumentqualität
  2. DSLDie Optimierung erfordert viele Abfragetests, dann das Gruppieren und Anpassen der Gewichtungen. Versuchen Sie, sie nicht anzupassen similarity.
  3. 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

andere

  • elastische chinesische Community: https://elasticsearch.cn/

  • esBewertung, 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ärprotokoll binlog), Alis canalSimulation selbst besteht darin, mysql slaveDaten auszuführen dump.

  • otterAlibabas 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 mysqlneue 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 esauftreten, werden Abhilfemaßnahmen hinzugefügt, die fehlerhaften Daten aufgezeichnet und workerAufgaben zur Abfrage von Reparaturen erstellt.

  • esSie können auch Anfragen stellen , nachdem Sie es erhalten haben db. 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 auch 10010Ergebnisse finden. OOMSelbst wenn dies nicht der Fall ist OOM, wirkt es sich möglicherweise auf die Bandbreite CPUund die Bandbreite usw. aus und beeinträchtigt somit die Leistung des gesamten Cluster.

  • ELKist das Akronym für drei Open-Source-Projekte: Elasticsearch, , Logstashund Kibana. 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

  • ESDie leistungsstärkste Abfrage istDSL

  • 读写不一致时间在秒级:因为有2个耗时阶段,一是同步阶段将数据从MySQL数据库写入ES,二是ES索引refresh阶段,数据从buffer写入索引后才可查到。

  • 初始全量导入,后续增量导入:Canal+MQ 数据管道同步,不需要或仅需少量代码工作

  • 不同的索引可以使用别名来同时查找?(待验证)

おすすめ

転載: blog.csdn.net/DisMisPres/article/details/127069817