Notas de acabado de Elasticsearch (1)

Definición de búsqueda elástica

  • elástico (elástico, flexible) + buscar (buscar)

  • Elasticsearch es un motor de búsqueda y análisis de datos eficiente que admite distribución, alta escalabilidad y alto tiempo real.

    • Admite almacenamiento de archivos distribuido en tiempo real.
    • Admite valores de campo de indexación para que se puedan buscar.
    • Motor de búsqueda distribuido para análisis en tiempo real.
    • Puede extenderse a cientos de servidores y manejar datos estructurados o no estructurados a nivel de PB.

  • El principio de implementación de Elasticsearch se divide principalmente en los siguientes pasos

    • Los usuarios envían datos a la base de datos de Elasticsearch.

    • es divide la oración correspondiente en palabras a través del controlador de segmentación de palabras. (Aquí, si se necesita una optimización de la estrategia más avanzada, el tokenizador se puede reemplazar más adelante).

    • Almacene su peso y los resultados de la segmentación de palabras en la base de datos juntos.

    • Cuando los usuarios buscan datos, los resultados se clasifican y califican según el peso (relevancia).

    • Presentar los resultados devueltos al usuario.

  • conceptos relacionados
    • clúster: representa un clúster. Hay varios nodos en el clúster, uno de los cuales es el nodo maestro. Este nodo maestro se puede elegir a través de elecciones. Los nodos maestro-esclavo son para el interior del clúster. Uno de los conceptos de es es la descentralización. Literalmente, significa que no hay un nodo central. Esto es para el exterior del clúster, porque desde el exterior, el clúster es lógicamente un todo. Su comunicación con cualquier nodo y toda la comunicación del clúster ES es equivalente.
      shards: significa index sharding. es puede dividir un índice completo en múltiples fragmentos. La ventaja de esto es que un índice grande se puede dividir en múltiples partes y distribuir a diferentes nodos. constituyen una búsqueda distribuida. El número de fragmentos solo se puede especificar antes de crear el índice y no se puede cambiar después de crear el índice.
      réplicas: representa la copia de índice. es puede establecer múltiples copias de índice. La función de la copia es mejorar la tolerancia a fallas del sistema. Cuando un nodo o un fragmento se daña o se pierde, se puede recuperar de la copia. El segundo es mejorar la eficiencia de las consultas de es, y es automáticamente equilibrará la carga de las solicitudes de búsqueda.
      recovery: Representa la recuperación de datos o la redistribución de datos.ES redistribuirá los fragmentos de índice de acuerdo con la carga de la máquina cuando un nodo se una o salga, y la recuperación de datos también se realizará cuando se reinicie el nodo que cuelga.
      river: representa una fuente de datos de es, y también es un método para otros métodos de almacenamiento (como: base de datos) para sincronizar datos con es. Es un servicio es que existe en forma de complemento. Al leer los datos en el río e indexarlos en es, los ríos oficiales incluyen couchDB, RabbitMQ, Twitter y Wikipedia.
      puerta de enlace: representa el método de almacenamiento de la instantánea del índice es. De forma predeterminada, es almacena primero el índice en la memoria y luego lo conserva en el disco duro local cuando la memoria está llena. La puerta de enlace almacena la instantánea del índice. Cuando el clúster es se apaga y se reinicia, los datos de la copia de seguridad del índice se leerán desde la puerta de enlace. es admite varios tipos de puertas de enlace, incluido el sistema de archivos local (predeterminado), el sistema de archivos distribuido, HDFS de Hadoop y el servicio de almacenamiento en la nube s3 de Amazon.
      discovery.zen: representa el mecanismo automático de descubrimiento de nodos de es. es es un sistema basado en p2p. Primero busca los nodos existentes a través de la transmisión y luego se comunica entre los nodos a través del protocolo de multidifusión. También admite la interacción punto a punto.
      Transporte: representa el método de interacción entre el nodo interno o clúster de es y el cliente, por defecto se utiliza el protocolo tcp para interactuar internamente, a la vez soporta el protocolo http (formato json), thrift, servlet, memcached , zeroMQ y otros protocolos de transmisión (integrados a través de complementos).

  • Algoritmo clave ES

  • índice invertido

    • Por ejemplo, inserte algunos datos

      • _id se puede personalizar, si no se define, _id se generará automáticamente. Al mismo tiempo, es incorporado también generará una identificación.
      • Tortura del alma: ¿Se puede usar _id como id?

        {  

            _id:"10001",       

            school_name:"佳木斯第一中学“,

            grade:”一年级“,

            class:”二班“,

            student_name:”张三“,

        }

        {  

            _id:"10002",       

            school_name:"佳木斯第二中学“,

            grade:”一年级“,

            class:”二班“,

            student_name:”李四“,

        }

        {  

            _id:"10003",       

            school_name:"佳木斯第一中学“,

            grade:”一年级“,

            class:”三班“,

            student_name:”王五“,

        }

      • Entonces el índice invertido ideal es:

        school_name

        {              

            "佳木斯第一中学":[1,3],

            "佳木斯第二中学":[2]

        }

        grade

        {

            "一年级":[1,2,3]

        }

        class

        {

            "二班":[1,2],

            "三班":[3]

        }

        student_name

        {

            "张三":[1],

            "李四":[2],

            "王五":[3]

        }

      • ¿Cómo indexar objetos jerárquicos?
        • Documentación de objetos multinivel

          {

            "gb": {

              "tweet": {

                "properties": {

                  "tweet":            { "type""string" },

                  "user": {

                    "type":             "object",

                    "properties": {

                      "id":           { "type""string" },

                      "gender":       { "type""string" },

                      "age":          { "type""long"   },

                      "name":   {

                        "type":         "object",

                        "properties": {

                          "full":     { "type""string" },

                          "first":    { "type""string" },

                          "last":     { "type""string" }

                        }

                      }

                    }

                  }

                }

              }

            }

          }

          se asigna a:

          {

              "tweet":            [elasticsearch, flexible, very],

              "user.id":          [@johnsmith],

              "user.gender":      [male],

              "user.age":         [26],

              "user.name.full":   [john, smith],

              "user.name.first":  [john],

              "user.name.last":   [smith]

          }

      • Los documentos en formato JSON se procesan en una estructura plana de par clave-valor de la siguiente manera.

      • Los peligros de los documentos anidados en matriz 

        {

          "title""Nest eggs",

          "body":  "Making your money work...",

          "tags":  [ "cash""shares" ],

          "comments": [

            {

              "name":    "John Smith",

              "comment""Great article",

              "age":     28,

              "stars":   4,

              "date":    "2014-09-01"

            },

            {

              "name":    "Alice White",

              "comment""More like this please",

              "age":     31,

              "stars":   5,

              "date":    "2014-10-22"

            }

          ]

        }

        Se buscará la siguiente consulta:

        GET /_search

        {

          "query": {

            "bool": {

              "must": [

                "match": { "name""Alice" }},

                "match": { "age":  28      }}

              ]

            }

          }

        }

        Solución: objetos anidados

  • árbol de diccionario

    • Para encontrar rápidamente un determinado término, Elasticsearch ordena todos los términos, genera un índice de términos, busca términos por dicotomía y busca la eficiencia de logN.
    • Introducción al árbol de diccionarios
    • No es necesario almacenar todos los términos, sino solo la relación de mapeo entre algunos de sus prefijos y los bloques del Diccionario de términos.Combinado con la tecnología de compresión de FST (Transductores de estado finito), el índice de términos puede almacenarse en memoria caché. Después de encontrar la posición de bloque del diccionario de términos correspondiente en el índice de términos, el término se busca en el disco, lo que reduce en gran medida el número de lecturas aleatorias del disco.
  • Lista de contabilización Compresión incremental

    • La lista de publicaciones es una matriz int, que almacena todos los identificadores de documentos que coinciden con un determinado término.

    • [1,2,3,5,10]==>[1,1,1,2,5]
      • A través del incremento, el número grande original se cambia a un decimal, solo se almacena el valor incremental y luego se comprime con mapas de bits Roaring
      • 可以高效联合索引:利用跳表(Skip list)的数据结构快速做“与”运算,或者利用bitset按位“与”
  • 相关度加权

    • 控制相关度(主要应用于多关键词搜索)

    • 当匹配到一组文档后,需要根据相关度排序这些文档,不是所有的文档都包含所有词,有些词比其他的词更重要。一个文档的相关度评分部分取决于每个查询词在文档中的权重。
    • 检索词频率
      • 检索词在该字段出现的频率?出现频率越高,相关性也越高。 字段中出现过 5 次要比只出现过 1 次的相关性高。如:检索词 honeymoon 在这个文档的 tweet 字段中的出现次数。
    • 反向文档频率
      • 每个检索词在索引中出现的频率?频率越高,相关性越低。检索词出现在多数文档中会比出现在少数文档中的权重更低。如:检索词 honeymoon 在索引上所有文档的 tweet 字段中出现的次数。
    • 字段长度准则
      • 字段的长度是多少?长度越长,相关性越低。 检索词出现在一个短的 title 要比同样的词出现在一个长的 content 字段权重更大。如:在这个文档中, tweet 字段内容的长度 -- 内容越长,值越小。

Supongo que te gusta

Origin blog.csdn.net/sm9sun/article/details/108602407
Recomendado
Clasificación