Partilhar via


Guia de início rápido: pesquisar na instância gerida do Azure para o Apache Cassandra usando o Índice Lucene (pré-visualização)

Cassandra Lucene Index, que deriva de Stratio Cassandra, é um plugin para Apache Cassandra. O Lucene Index estende sua funcionalidade de índice para fornecer recursos de pesquisa de texto completo e pesquisa multivariável, geoespacial e bitemporal gratuita. Isso é conseguido através de uma implementação de índices secundários de Cassandra baseada no Apache Lucene, onde cada nó do cluster indexa os 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. Este recurso é fornecido sem um contrato de nível de serviço. Não recomendamos 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.

O plugin Lucene Index não pode executar pesquisas entre partições apenas no índice. Cassandra precisa enviar a consulta para cada nó. Essa limitação 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.

Se seus requisitos de pesquisa forem significativos, recomendamos que você implante um datacenter secundário dedicado para usar apenas para pesquisas. Deverá haver um número mínimo de nós, cada um com um elevado número de núcleos (mínimo de 16). Os espaços-chave no datacenter primário (operacional) devem ser configurados para replicar dados para o datacenter 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 essa etapa por meio do portal do Azure. Os índices Lucene são habilitados por padrão quando clusters são implantados a partir do portal. Se quiser adicionar índices Lucene a um cluster existente, selecione Atualizar no painel Visão geral do portal. Selecione Cassandra Lucene Index e, em seguida, selecione Atualizar para implantar.

    Captura de tela que mostra as propriedades do cluster Update Cassandra.

  • Conecte-se ao cluster a partir do Cassandra Query Language Shell (CQLSH).

Criar dados com o Lucene Index

  1. Na janela de comando CQLSH, crie um keyspace e uma tabela:

       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 indexa todas as colunas da tabela com os tipos especificados. O índice de leitura usado para pesquisar é atualizado uma vez por segundo. Como alternativa, é possível atualizar explicitamente todas as partições do índice efetuando uma pesquisa vazia com a consistência de 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. Você também pode realizar essa pesquisa 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 principais tweets mais relevantes e onde o body campo contém a frase Click my 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. Você pode restringir a pesquisa anterior 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 pode ordenar os resultados por distância até 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óximo passo

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