Início Rápido: pesquisar Instância Gerenciada do Azure para Apache Cassandra usando o Índice Lucene (versão prévia)

O Índice Lucene do Cassandra, derivado do Cassandra da Stratio, é um plug-in do Apache Cassandra que estende sua funcionalidade de índice para fornecer recursos de pesquisa de texto completo e pesquisa multivariável, geoespacial e bitemporal gratuita. Ele é obtido por meio de uma implementação baseada em Apache Lucene de índices secundários do Cassandra, em que cada nó do cluster indexa seus próprios dados. Este início rápido demonstra como pesquisar na Instância Gerenciada do Azure para Apache Cassandra usando o Índice Lucene.

Importante

O Índice Lucene está em versão prévia 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, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Aviso

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

Quando os requisitos de pesquisa são significativos, recomendamos implantar um data center secundário dedicado a ser usado apenas para pesquisas, com um número mínimo de nós, cada um com um número alto de núcleos (mínimo de 16). Os keyspaces no data center principal (operacional) devem ser configurados para replicar dados para o data center secundário (pesquisa).

Pré-requisitos

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

  • Implantar um cluster da Instância Gerenciada do Azure para Apache Cassandra. Você pode fazer isso por meio do portal – os índices Lucene serão habilitados por padrão quando os clusters forem implantados no portal. Se você quiser adicionar índices Lucene a um cluster existente, clique Update na folha visão geral do portal, selecione Cassandra Lucene Index e clique em atualizar para implantar.

    Captura de tela de Atualizar Propriedades do Cluster do Cassandra.

  • Conecte-se ao cluster a partir do CQLSH.

Criar dados com o Índice Lucene

  1. CQLSH Na janela de comando, crie um keyspace e uma tabela, conforme mostrado 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 Índice Lucene:

       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 amostra:

        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 em 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 executada 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;
    

Pesquisar dados

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

        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 classificar 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óximas etapas

Neste guia de início rápido, você aprendeu como pesquisar um cluster de uma Instância Gerenciada do Azure para Apache Cassandra usando a Pesquisa Luciene. Você já pode começar a trabalhar com o cluster: