URL: https://linuxfr.org/users/gart/journaux/index-secondaire-elasticsearch-pour-cassandra Title: Index secondaire Elasticsearch pour Cassandra Authors: Gart Algar Date: 2020年01月16日T16:40:23+01:00 License: CC By-SA Tags: cassandra, elasticsearch, index, lucene et fts Score: 9 Index secondaire Elasticsearch pour Cassandra # Cassandra et Elasticsearch en une seule connexion Cet index permet de faire des requêtes de type « _Full Text Search_ » en utilisant la syntaxe CQL, par l’intermédiaire du pilote DataStax par exemple. En créant une table avec une colonne qui ne contiendra pas de données et un index associé à cette colonne, des requêtes peuvent être envoyées vers Elasticsearch et les _ids_ Cassandra correspondants sont retournés Il n’y a pas besoin d’une connexion supplémentaire vers Elasticsearch, ni de faire de recoupements compliqués entre les données Cassandra et Elasticsearch. La réplication se fait automatiquement de Cassandra vers Elasticsearch. Il est possible de spécifier les types de données des champs qui seront indexés, pour permettre des requêtes plus complexes avec des *range*, *match*, etc. # Exemple de requête Prenons une table définie comme ceci : ```sql CREATE TABLE genesys.emails ( id UUID PRIMARY KEY, subject text, body text, userid int, query text ); ``` Et un index comme ceci : ```sql CREATE CUSTOM INDEX ON genesys.emails(query) USING 'com.genesyslab.webme.commons.index.EsSecondaryIndex' WITH OPTIONS = { 'unicast-hosts': 'localhost:9200', 'mapping-emails': ' { "emails":{ "date_detection":false, "numeric_detection":false, "properties":{ "id":{ "type":"keyword" }, "userid":{ "type":"long" }, "subject":{ "type":"text", "fields":{ "keyword":{ "type":"keyword", "ignore_above":256 } } }, "body":{ "type":"text" }, "IndexationDate":{ "type":"date", "format":"yyyy-MM-dd''T''HH:mm:ss.SSS''Z''" }, "_cassandraTtl":{ "type":"long" } } } } '}; ``` Nous pouvons faire des requêtes : ```sql select id, subject, body, userid, query from emails where query='body:cassan*'; ``` ```sql select id, subject, body, userid from genesys.emails where query='{"query":{"range":{"userid":{"gte":10,"lte":50}}}}'; ``` Cet index a été écrit par un collègue, et j’assure pour l’instant la partie intégration Open Source (disponibilité dans Maven Central, GitHub, etc.). Un conteneur Docker est disponible pour faciliter les tests. C’est une installation de Cassandra avec le greffon déjà présent. # Liens - [dépôt GitHub](https://github.com/GenesysPureEngagePremise/cassandra-es-index) - [dépôt Docker Hub](https://hub.docker.com/r/gartcimore/cassandra-es-index)