Introduction
La syntaxe du langage de requête (DSL) d'Elasticsearch est très complexe et les fonctions de requête (filtre/requête/match/agg/geo) sont diverses, et il est très gênant qu'elle soit exploitée via une API restful ou une API Java. Le plug-in Elasticsearch-SQL peut interroger Elasticsearch en utilisant la syntaxe SQL traditionnelle, qui est très pratique à utiliser.
Adresse du projet Elasticsearch-SQL : https://github.com/NLPchina/elasticsearch-sql
Fonctions implémentées par Elasticsearch-SQL :
1) Installation du plug-in.
2) Requête de syntaxe SQL.
3) Requêtes au-delà de SQL.
4) Prise en charge du mode JDBC.
installation du plugin
La version es que nous utilisons est la 7.4.1, si vous utilisez une version différente, vous pouvez trouver de l'aide sur https://github.com/NLPchina/elasticsearch-sql. Tel que : https://github.com/NLPchina/elasticsearch-sql/releases/download/7.6.2.0/elasticsearch-sql-7.6.2.0.zip
Changez d'utilisateur elsearch, ouvrez le répertoire d'installation et exécutez la commande suivante pour installer le plugin
[root@bogon es]# su elsearch
[elsearch@bogon es]# cd /home/es/elasticsearch-7.4.1
[elsearch@bogon es]# ./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/7.4.1.0/elasticsearch-sql-7.4.1.0.zip
Le serveur elasticsearch doit être redémarré, sinon l'erreur suivante sera signalée lors de son utilisation :
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"No endpoint or operation is available at [sql]"}],"type":"illegal_argument_exception","reason":"No endpoint or operation is available at [sql]"},"status":400}
Redémarrez le service elasticsearch
[root@bogon root]# ps -ef | grep elasticsearch #找到进程号
[root@bogon root]# kill -9 进程号
[root@bogon root]# su elastic
[elastic@bogon root]$ ES_PATH_CONF=/home/es/elasticsearch/config sh /home/es/elasticsearch-7.4.1/bin/elasticsearch -d
Tester la requête SQL :
Une fois l'installation réussie, nous pouvons interroger ES via SQL.
1) Remplissez d'abord quelques données :
POST /tvs/sales/_bulk
{ "index": {}}
{ "price" : 1000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-10-28" }
{ "index": {}}
{ "price" : 2000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-11-05" }
{ "index": {}}
{ "price" : 3000, "color" : "绿色", "brand" : "小米", "sold_date" : "2016-05-18" }
{ "index": {}}
{ "price" : 1500, "color" : "蓝色", "brand" : "TCL", "sold_date" : "2016-07-02" }
{ "index": {}}
{ "price" : 1200, "color" : "绿色", "brand" : "TCL", "sold_date" : "2016-08-19" }
{ "index": {}}
{ "price" : 2000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-11-05" }
{ "index": {}}
{ "price" : 8000, "color" : "红色", "brand" : "三星", "sold_date" : "2017-01-01" }
{ "index": {}}
{ "price" : 2500, "color" : "蓝色", "brand" : "小米", "sold_date" : "2017-02-12" }
2) Voici deux façons d'utiliser :
①. Entrez dans les Dev Tools de l'interface Kibana : GET _sql?sql=select * from tvs which price > 1000
②.Saisissez dans la barre d'adresse du navigateur : http://ip:9200/_sql?sql=select * à partir des téléviseurs dont le prix est > 1000
Installez l'extension Chrome du site Elasticsearch-SQL
Utilisez une méthode de requête plus pratique :
1) Téléchargez le package ZIP étendu : https://github.com/shi-yuan/elasticsearch-sql-site-chrome
2) Décompressez.
3). Entrez dans le navigateur Chrome : chrome://extensions/
4) Activez le mode développeur.
5) Chargez l'extension décompressée.
6) Lors de l'utilisation, cliquez simplement sur l'icône d'extension pour traduire les instructions SQL en DSL.
question
1) Actuellement, j'ai rencontré un problème. Après avoir installé le plug-in Elasticsearch-SQL, je démarre Elasticsearch et signale une erreur :
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Cannot replace existing handler for [/_sql] for method: POST
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125) ~[elasticsearch-cli-7.4.1.jar:7.4.1]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.4.1.jar:7.4.1]
Caused by: java.lang.IllegalArgumentException: Cannot replace existing handler for [/_sql] for method: POST
at org.elasticsearch.rest.MethodHandlers.addMethods(MethodHandlers.java:52) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.rest.RestController.lambda$registerHandler$1(RestController.java:156) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.common.path.PathTrie$TrieNode.insertOrUpdate(PathTrie.java:167) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.common.path.PathTrie$TrieNode.access$400(PathTrie.java:76) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.common.path.PathTrie.insertOrUpdate(PathTrie.java:316) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.rest.RestController.registerHandler(RestController.java:155) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.plugin.nlpcn.RestSqlAction.<init>(RestSqlAction.java:35) ~[?:?]
at org.elasticsearch.plugin.nlpcn.SqlPlug.getRestHandlers(SqlPlug.java:35) ~[?:?]
at org.elasticsearch.action.ActionModule.initRestHandlers(ActionModule.java:692) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.node.Node.<init>(Node.java:609) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.node.Node.<init>(Node.java:255) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:221) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:221) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.4.1.jar:7.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.4.1.jar:7.4.1]
... 6 more
[2019-10-31T09:38:03,170][INFO ][o.e.x.m.p.NativeController] [localhost.localdomain] Native controller process has stopped - no new native processes can be started
Je n'ai pas encore trouvé de solution, si quelqu'un le sait, n'hésitez pas à me le faire savoir.
Solution temporaire : supprimez le répertoire sql sous le répertoire d'installation/Plugins