Compartilhar via


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

Cassandra Lucene Index, que deriva de Stratio Cassandra, é um plug-in para Apache Cassandra. O Índice Lucene estende sua funcionalidade de índice para fornecer recursos completos de pesquisa de texto e pesquisa multivariável, geoespacial e bitemporal gratuita. Ela é obtida 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 realizar buscas na Instância Gerenciada do Azure para Apache Cassandra utilizando o Lucene Index.

Importante

O Índice Lucene está em versão prévia pública. O recurso é fornecido sem um Contrato de Nível de Serviço. Não o recomendamos para carga de trabalho de produção. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

O plug-in de Índice Lucene não pode executar pesquisas entre partições somente no índice. Cassandra precisa enviar a consulta para cada nó. Essa limitação pode levar a problemas de desempenho (memória e carga de CPU) para pesquisas entre partições que podem afetar cargas de trabalho de estado estável.

Se os requisitos de pesquisa forem significativos, recomendamos que você implante um datacenter secundário dedicado para usar somente para pesquisas. Um número mínimo de nós deve ter um número alto de núcleos (no mínimo 16). Os keyspaces do seu datacenter primário (operacional) devem ser configurados para replicar dados para o datacenter secundário (de 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 essa etapa por meio do portal do Azure. Os índices Lucene são habilitados por padrão quando os clusters são implantados no portal. Se você 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 atualizar as propriedades do cluster do Cassandra.

  • Conecte-se ao cluster a partir do Shell de Linguagem de Consulta do Cassandra (CQLSH).

Criar dados com o Índice Lucene

  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 Í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 que você criou anteriormente indexa todas as colunas na tabela com os tipos especificados. O índice de leitura usado para pesquisa é atualizado uma vez por segundo. Como alternativa, você pode atualizar explicitamente todos os fragmentos de índice executando 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 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. Você também pode executar 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;
    

Pesquisar dados

  1. Para pesquisar os 100 principais tweets que são mais relevantes e onde o body campo contém a frase Click my link dentro de 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. Você pode restringir a pesquisa anterior a tweets que foram 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. Você também pode classificar 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óxima etapa

Neste início rápido, você aprendeu a pesquisar um cluster da Instância Gerenciada do Azure para Apache Cassandra usando o Índice Lucene. Você já pode começar a trabalhar com o cluster: