Partilhar via


Guia de início rápido: pesquisar instância gerenciada do Azure para Apache Cassandra usando o Lucene Index (visualização)

Cassandra Lucene Index, derivado de Stratio Cassandra, é um plugin para Apache Cassandra que estende sua funcionalidade de índice para fornecer recursos de pesquisa de texto completo e pesquisa multivariável, geoespacial e bitemporal gratuita. É conseguido através de uma implementação baseada em Apache Lucene de índices secundários Cassandra, onde cada nó do cluster indexa os seus próprios dados. Este guia de início rápido demonstra como pesquisar a Instância Gerenciada do Azure para Apache Cassandra usando o Lucene Index.

Importante

Lucene Index está em pré-visualização pública. Esse recurso é fornecido sem um contrato de nível de serviço e não é recomendado para cargas de trabalho de produção. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Aviso

Uma limitação com o plugin Lucene index é que as pesquisas entre partições não podem ser executadas apenas no índice - Cassandra precisa enviar a consulta para cada nó. Isso pode levar a problemas com o desempenho (memória e carga da CPU) para pesquisas entre partições que podem afetar cargas de trabalho de estado estacionário.

Quando os requisitos de pesquisa são significativos, recomendamos a implantação de um data center secundário dedicado para ser usado apenas para pesquisas, com um número mínimo de nós, cada um com um alto número de núcleos (mínimo 16). Os espaços-chave no seu centro de dados primário (operacional) devem então ser configurados para replicar dados para o seu centro de dados secundário (pesquisa).

Pré-requisitos

  • Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  • Implante uma instância gerenciada do Azure para o cluster Apache Cassandra. Você pode fazer isso através do portal - os índices Lucene serão habilitados por padrão quando os clusters forem implantados a partir do portal. Se quiser adicionar índices Lucene a um cluster existente, clique Update na folha de visão geral do portal, selecione Cassandra Lucene Indexe clique em atualizar para implantar.

    Screenshot de Atualizar Propriedades do Cluster Cassandra.

  • Conecte-se ao cluster a partir do CQLSH.

Criar dados com o Lucene Index

  1. Na janela de CQLSH comando, crie um espaço de teclas e uma tabela como abaixo:

       CREATE KEYSPACE demo
       WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'datacenter-1': 3};
       USE demo;
       CREATE TABLE tweets (
          id INT PRIMARY KEY,
          user TEXT,
          body TEXT,
          time TIMESTAMP,
          latitude FLOAT,
          longitude FLOAT
       );
    
  2. Agora crie um índice secundário personalizado na tabela usando o Lucene Index:

       CREATE CUSTOM INDEX tweets_index ON tweets ()
       USING 'com.stratio.cassandra.lucene.Index'
       WITH OPTIONS = {
          'refresh_seconds': '1',
          'schema': '{
             fields: {
                id: {type: "integer"},
                user: {type: "string"},
                body: {type: "text", analyzer: "english"},
                time: {type: "date", pattern: "yyyy/MM/dd"},
                place: {type: "geo_point", latitude: "latitude", longitude: "longitude"}
             }
          }'
       };
    
  3. Insira os seguintes tweets de exemplo:

        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (1,'theo','Make money fast, 5 easy tips', '2023-04-01T11:21:59.001+0000', 0.0, 0.0);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (2,'theo','Click my link, like my stuff!', '2023-04-01T11:21:59.001+0000', 0.0, 0.0);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (3,'quetzal','Click my link, like my stuff!', '2023-04-02T11:21:59.001+0000', 0.0, 0.0);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (4,'quetzal','Click my link, like my stuff!', '2023-04-01T11:21:59.001+0000', 40.3930, -3.7328);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (5,'quetzal','Click my link, like my stuff!', '2023-04-01T11:21:59.001+0000', 40.3930, -3.7329);
    

Controlar a consistência de leitura

  1. O índice criado anteriormente indexará todas as colunas da tabela com os tipos especificados e o índice de leitura usado para pesquisa será atualizado uma vez por segundo. Como alternativa, você pode atualizar explicitamente todos os fragmentos de índice com uma pesquisa vazia com consistência ALL:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. Agora, você pode pesquisar tweets dentro de um determinado intervalo de datas:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Essa pesquisa também pode ser realizada forçando uma atualização explícita dos fragmentos de índice envolvidos:

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
           refresh: true
        }') limit 100;
    

Dados de pesquisa

  1. Para pesquisar os 100 tweets mais relevantes em que o campo corpo contém a frase "Clique no meu link" dentro de um determinado intervalo de datas:

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1}
        }') LIMIT 100;
    
  2. Para refinar a pesquisa para obter apenas os tweets escritos por usuários cujos nomes começam com "q":

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1}
        }') LIMIT 100;
    
  3. Para obter os 100 resultados filtrados mais recentes, você pode usar a opção de classificação:

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1},
           sort: {field: "time", reverse: true}
        }') limit 100;
    
  4. A pesquisa anterior pode ser restrita a tweets criados perto de uma posição geográfica:

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"},
              {type: "geo_distance", field: "place", latitude: 40.3930, longitude: -3.7328, max_distance: "1km"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1},
           sort: {field: "time", reverse: true}
        }') limit 100;
    
  5. Também é possível ordenar os resultados por distância a uma posição geográfica:

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"},
              {type: "geo_distance", field: "place", latitude: 40.3930, longitude: -3.7328, max_distance: "1km"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1},
           sort: [
              {field: "time", reverse: true},
              {field: "place", type: "geo_distance", latitude: 40.3930, longitude: -3.7328}
           ]
        }') limit 100;
    

Próximos passos

Neste início rápido, você aprendeu como pesquisar uma Instância Gerenciada do Azure para cluster Apache Cassandra usando o Lucene Search. Agora você pode começar a trabalhar com o cluster: