cube.js elasticsearch 官方sql 扩展使用

环境准备

  • es 环境
version: "3"
services: 
  es01:
    image: elasticsearch:7.3.2
    container_name: es01
   // 开启sql 以及认证
    environment:
      - "http.host=0.0.0.0"
      - "transport.host=localhost"
      - "network.host=0.0.0.0"
      - "http.cors.enabled=true"
      - "http.cors.allow-origin=*"
      - "xpack.ml.enabled=false"
      - "xpack.security.enabled=true"
      - "xpack.sql.enabled=true"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200

初始化账户(进入容器)

elasticsearch-setup-passwords  auto -v
  • es 数据
    app.js
 
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://elastic:ed824a5iPV33lrO7MOz0@localhost:9200' })
 
async function run () {
  // Let's start by indexing some data
  await client.index({
    index: 'game',
    // type: '_doc', // uncomment this line if you are using Elasticsearch ≤ 6
    body: {
      character: 'Ned Stark',
      quote: 'Winter is coming.'
    }
  })
 
  await client.index({
    index: 'game',
    // type: '_doc', // uncomment this line if you are using Elasticsearch ≤ 6
    body: {
      character: 'Daenerys Targaryen',
      quote: 'I am the blood of the dragon.'
    }
  })
 
  await client.index({
    index: 'game',
    // type: '_doc', // uncomment this line if you are using Elasticsearch ≤ 6
    body: {
      character: 'Tyrion Lannister',
      quote: 'A mind needs books like a sword needs a whetstone.'
    }
  })
 
  // here we are forcing an index refresh, otherwise we will not
  // get any result in the consequent search
  await client.indices.refresh({ index: 'game' })
 
  // Let's search!
  const { body } = await client.search({
    index: 'game',
    // type: '_doc', // uncomment this line if you are using Elasticsearch ≤ 6
    body: {
      query: {
        match: { quote: 'winter' }
      }
    }
  })
 
  console.log(body.hits.hits)
}
 
run().catch(console.log)

cube.js 配置

.env

CUBEJS_DB_URL=http://elastic:ed824a5iPV33lrO7MOz0@localhost:9200
CUBEJS_DB_ELASTIC_QUERY_FORMAT=json
CUBEJS_DEV_MODE=true
CUBEJS_DB_TYPE=elasticsearch
CUBEJS_API_SECRET=b9a87765c28b91d570e51647c3e7cbb5a71364147bdfbef65ffa307808ef9128b98142883a541e48a8b8517d0e02d7e8344ac694c29e7b0f09a3ee0df10755d8

package.json

{
  "name": "myappdemo",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "dev": "./node_modules/.bin/cubejs-server"
  },
  "template": "docker",
  "templateVersion": "0.26.44",
  "devDependencies": {
    "@cubejs-backend/cubestore-driver": "^0.28.8",
    "@cubejs-backend/elasticsearch-driver": "^0.28.8",
    "@cubejs-backend/server": "^0.28.8"
  }
}

访问效果


说明

对于database 的处理有点问题,多了main,都是可以使用的

参考资料

https://www.npmjs.com/package/@elastic/elasticsearch
https://cube.dev/docs/reference/environment-variables#database-connection

原文地址:https://www.cnblogs.com/rongfengliang/p/15068241.html