Primeiros passos com ElasticSearch: Por que escolher o ES como mecanismo de pesquisa?

introduzir

À medida que os volumes de dados continuam a crescer, a pesquisa e a análise de conjuntos de dados em grande escala tornam-se cada vez mais importantes. Os bancos de dados tradicionais muitas vezes têm um desempenho ruim diante dessa demanda e neste momento é necessário um mecanismo especializado para busca e análise. ElasticSearch (abreviado ES) é um mecanismo de pesquisa tão poderoso com muitas vantagens que o tornam a primeira escolha de muitas empresas e desenvolvedores.

Simplificando: ElasticSearché um mecanismo distribuído de armazenamento , pesquisa e análise em tempo real .

Na minha opinião, o que há de mais forte no ES é, na verdade, sua função de pesquisa difusa.
Então algumas pessoas perguntarão: Meu banco de dados também pode implementar pesquisa difusa?

select * from student where name like '%宁正%'

Por exemplo, este sql pode encontrar alunos com a palavra Ning Zheng em seus nomes
. Na verdade, isso pode ser usado para pesquisa difusa, mas name like '%宁正%'esta forma de escrita não é indexada, então significa: Se o seu volume de dados for muito grande, por exemplo , dezenas de milhões ou centenas de milhões de itens, não importa se você otimiza o código, sua consulta certamente ocorrerá em segundos.

E há outra situação. Quando pesquisamos na maioria das vezes, as informações inseridas não são muito precisas. Por exemplo, quero pesquisar ElasticSearch informações relevantes, mas as digitei acidentalmente ElesticSearch . Se você usar a instrução SQL para realizar uma pesquisa difusa , você não poderá pesquisar. Encontre informações relacionadas a es

Então pode ser usado nesta situação ElasticSearch , é apenas para pesquisa.

Portanto, vou listar as vantagens do ES e fazer uma análise simples:

ES é muito bom em pesquisa difusa de texto completo

Motivo: o ES é baseado em índice invertido, o que permite que o ES corresponda palavras-chave rapidamente e retorne resultados relevantes sem a necessidade de varreduras completas da tabela, como nos bancos de dados tradicionais. Os índices invertidos são altamente eficientes ao armazenar e consultar dados de texto em grande escala.

Então alguns amigos podem perguntar depois de ler: Qual é o índice invertido? Qual é a diferença entre um índice invertido e um índice direto? Os índices invertidos podem ser usados ​​nos bancos de dados que usamos todos os dias?

Então vamos responder um por um:

O que é um índice invertido?

O índice invertido é uma estrutura de índice baseada em palavras-chave comumente usada em mecanismos de pesquisa de texto completo e sistemas de recuperação de informações. É uma estrutura de dados que mapeia palavras-chave em um documento para IDs de documentos correspondentes.

Especificamente, o índice invertido mapeia cada palavra-chave do documento para o ID do documento que contém a palavra-chave. Para cada palavra-chave, o índice invertido registra a lista de documentos em que a palavra-chave aparece, incluindo frequência de palavras, localização e outras informações. Isso permite que uma determinada palavra-chave encontre rapidamente documentos relevantes que contenham essa palavra-chave.

Qual é a diferença entre índice invertido e índice direto?

Um índice direto é uma estrutura de índice classificada por ID de documento, que armazena informações detalhadas sobre documentos e cada entrada no documento.

Tenho uma maneira fácil de entender de expressar isso:

O índice direto é como o índice quando lemos um livro: podemos encontrar diretamente o conteúdo do número da página correspondente através do número da página.

O índice invertido extrai o vocabulário de todo o livro e registra em quais números de página o vocabulário existe para formar um relacionamento de mapeamento. Quando eu quiser descobrir em quais páginas um vocabulário aparece, só preciso usar esta tabela de mapeamento. Encontre rapidamente a página você quer

Com esta explicação, todos deveriam entender.

Os índices invertidos podem ser usados ​​nos bancos de dados que usamos todos os dias?

Na verdade, o banco de dados pode suportar índice invertido, mas em comparação com o índice direto tradicional, a implementação do índice invertido do banco de dados é relativamente complicada, e o principal objetivo de design do banco de dados é apoiar o gerenciamento eficiente de dados e o processamento de transações, em vez de focar em requisitos de consulta complexos, como pesquisa de texto completo

A sintaxe de consulta do ES é mais flexível, permitindo controle preciso das condições e pesos da consulta, bem como pesquisas difusas mais complexas.

A sintaxe de consulta do Elasticsearch é bastante flexível e você pode controlar as condições e os pesos da consulta conforme necessário e realizar consultas complexas, como consultas booleanas, consultas de intervalo, consultas difusas e localizações geográficas. Usando a sintaxe de consulta, pesquisas mais precisas podem ser obtidas.

Estou escrevendo uma demonstração com base em minha própria consulta de localização geográfica.

geoDistanceQueryÉ uma consulta de localização geográfica, utilizada para consultar documentos a uma certa distância de um determinado ponto de coordenadas geográficas. Basta fornecer as coordenadas de latitude e longitude de um ponto geográfico, uma distância e uma unidade:

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
GeoDistanceQueryBuilder geoQuery = QueryBuilders.geoDistanceQuery("local")
                .point(lat, lon) // 地理位置坐标
                .distance(distance, DistanceUnit.KILOMETERS); // 查询距离

sourceBuilder.query(geoQuery);
SearchRequest searchRequest = new SearchRequest("indexName");
searchRequest.source(sourceBuilder);

// 执行查询
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

Na demonstração acima, criamos uma geoDistanceQueryconsulta para consultar documentos cujo campo de localização esteja a uma certa distância de uma determinada coordenada geográfica. A unidade usada aqui é quilômetros.

ES fornece funções ricas de agregação e análise

ES fornece nativamente funções ricas de agregação e análise, que podem realizar uma variedade de operações, como agregação , agrupamento e classificação de resultados . ES também fornece muitas outras funções de análise, como estatísticas de frequência de palavras , histogramas de data , etc. Esses recursos ajudam os usuários a compreender os dados mais profundamente e a gerar painéis e visualizações.

Também escreverei uma demonstração relativamente simples aqui, basta dar uma olhada e explicarei em detalhes em um blog posterior.

Suponha que temos um índice que armazena informações sobre filmes, incluindo os campos: título (título do filme), gênero (tipo de filme) e classificação (classificação do filme).
Agora, queremos agregar filmes de diferentes gêneros e calcular a classificação média de cada gênero.
Primeiro, precisamos construir uma consulta de agregação, especificar o agrupamento por campo de gênero e calcular a média de cada agrupamento.

GET movies/_search
{
    
    
  "size": 0,
  //指定聚合操作的容器
  "aggs": {
    
     
  	//聚合操作起的一个名字
    "genres": {
    
     
      //指定分组字段的聚合操作类型
      "terms": {
    
     
      	// 指定要分组的字段
        "field": "genre"
      },
      "aggs": {
    
    
      	//平均值聚合操作起的一个名字
        "avg_rating": {
    
    
          //计算均值的聚合操作类型
          "avg": {
    
    
            //操作的字段
            "field": "rating"
          }
        }
      }
    }
  }
}

Na consulta acima, usamos termsagregação para agrupar filmes por genrecampos e usamos avgagregação para calcular a média de cada ratingcampo agrupado.
Você obterá resultados semelhantes aos seguintes:

"aggregations" : {
    
    
  "genres" : {
    
    
    "buckets" : [
      {
    
    
        "key" : "Action",
        "doc_count" : 100,
        "avg_rating" : {
    
    
          "value" : 4.2
        }
      },
      {
    
    
        "key" : "Drama",
        "doc_count" : 80,
        "avg_rating" : {
    
    
          "value" : 3.8
        }
      },
      ...
    ]
  }
}

Existem 100 filmes na categoria Ação com avaliação média de 4,2 e 80 filmes na categoria Drama com avaliação média de 3,8.

Este é apenas um exemplo simples de funções de agregação e análise. Na verdade, o ES fornece operações de agregação e funções de análise mais ricas, e operações mais complexas podem ser realizadas de acordo com necessidades específicas.

ES usa uma arquitetura distribuída para lidar melhor com dados em grande escala e consultas altamente simultâneas.

A arquitetura distribuída ES tem um bom desempenho na expansão horizontal. Ao fragmentar dados e armazená-los em vários nós, o ES pode processar dados em grande escala e melhorar o desempenho das consultas por meio de consultas paralelas e computação distribuída.

Não entrarei em detalhes aqui, mas irei apresentá-lo em detalhes mais tarde.

Então usamos ES sem cérebro ou precisamos fazê-lo em uma situação específica?

A resposta para a primeira pergunta é, claro, não dá para ir para o ES sem pensar!

  1. Embora ES seja poderoso, também é complexo. Usá-lo requer algum aprendizado e compreensão. Sem treinamento ou experiência adequada, você poderá encontrar erros de configuração, problemas de desempenho, erros de indexação e consulta e muito mais
  2. ES é um sistema distribuído que requer hardware apropriado e suporte de recursos para funcionar corretamente. A implantação inadequada pode levar a problemas de desempenho ou desperdício de recursos.
  3. ES requer gerenciamento e manutenção adequados, incluindo monitoramento da integridade do cluster, backup e restauração de dados, atualização e upgrade, etc. Se não for gerenciado e mantido adequadamente, você poderá enfrentar perda de dados, degradação de desempenho ou riscos de segurança
  4. custo! custo! Ou o custo!

A segunda questão é: quando devemos usar ES?

Na minha opinião, pode ser considerado das seguintes formas:

  1. Escala de dados. Se os dados que você deseja processar atingirem milhões ou mesmo centenas de milhões, você poderá usar o ES para processar grandes conjuntos de dados.
  2. Complexidade da pesquisa. Se você precisa realizar frequentemente consultas de texto complexas e preocupações em dados de texto completo, o ES é a melhor escolha.
  3. Em tempo real, se você precisar analisar dados em tempo real rapidamente, o ES é uma escolha adequada, pois suporta indexação e consulta de dados em tempo real e pode analisar e visualizar os dados imediatamente quando chegam.
  4. Requisitos distribuídos e de alta disponibilidade, se você precisa de uma solução de armazenamento e análise de dados escalável, de alta disponibilidade e tolerante a falhas, o ES é uma escolha adequada

Portanto, não use essa tecnologia descuidadamente só porque ela é poderosa. Ao usar a tecnologia, você também deve considerar os riscos que ela traz.

Acho que você gosta

Origin blog.csdn.net/qq_43649799/article/details/132637341
Recomendado
Clasificación