You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OJet项目中连接Elasticsearch并获取索引JSON数据?

在Oracle JET(OJet)项目中连接Elasticsearch并获取索引数据的实现方案

我明白你现在需要在OJet项目里对接Elasticsearch,这其实并不复杂,咱们一步步来实现,从连接到获取JSON数据都给你捋清楚。

一、准备工作:安装Elasticsearch JavaScript客户端

OJet基于JavaScript生态,官方的@elastic/elasticsearch客户端是最直接的选择,先在项目里安装依赖:

# 在项目根目录执行
npm install @elastic/elasticsearch --save
# 或者用yarn
yarn add @elastic/elasticsearch

二、创建Elasticsearch连接实例

在OJet项目的src/js目录下新建一个es-client.js文件,用来统一管理Elasticsearch的连接配置:

import { Client } from '@elastic/elasticsearch';

// 初始化Elasticsearch客户端
const esClient = new Client({
  node: 'http://你的Elasticsearch地址:端口', // 示例:http://localhost:9200
  // 如果你的ES开启了账号密码验证,添加以下配置
  auth: {
    username: '你的ES用户名',
    password: '你的ES密码'
  }
});

// 导出客户端供其他组件调用
export default esClient;

三、在OJet组件中获取索引数据

以一个ViewModel为例,展示如何调用ES客户端查询指定索引的JSON数据:

import esClient from '../es-client';

class EsDataViewModel {
  constructor() {
    // 用Knockout observableArray存储ES返回的数据
    this.esIndexData = ko.observableArray([]);
    // 页面加载时自动获取数据
    this.loadIndexData();
  }

  async loadIndexData() {
    try {
      // 调用ES的search API查询目标索引
      const response = await esClient.search({
        index: '你的索引名称', // 替换为你已创建的ES索引名
        // 这里可以自定义查询条件,示例是查询所有文档
        query: {
          match_all: {}
        },
        // 可选:指定返回的字段,减少数据传输量
        _source: ['title', 'content', 'create_time'],
        // 可选:设置返回数据条数,默认10条
        size: 20
      });

      // 从返回结果中提取实际数据(ES返回的结构里,hits.hits包含文档内容)
      const formattedData = response.hits.hits.map(item => item._source);
      this.esIndexData(formattedData);
      console.log('成功获取ES数据:', formattedData);
    } catch (error) {
      console.error('获取ES数据失败:', error);
      // 这里可以添加前端错误提示,比如OJet的oj-alert组件
    }
  }
}

export default EsDataViewModel;

四、在OJet视图中展示数据

对应上面的ViewModel,在HTML视图中用OJet组件渲染数据:

<div class="oj-flex oj-flex-items-pad">
  <h2>Elasticsearch索引数据展示</h2>
  <oj-list-view id="es-data-list"
                data="[[esIndexData]]"
                selection-mode="none">
    <template slot="itemTemplate" data-oj-as="item">
      <div class="oj-list-item">
        <h4><oj-bind-text value="[[$current.item.title]]"></oj-bind-text></h4>
        <p><oj-bind-text value="[[$current.item.content]]"></oj-bind-text></p>
        <span class="oj-text-sm oj-text-secondary">
          创建时间: <oj-bind-text value="[[$current.item.create_time]]"></oj-bind-text>
        </span>
      </div>
    </template>
  </oj-list-view>
</div>

关键注意事项

  • 跨域问题:如果OJet项目和ES不在同一域名下,需要在ES的elasticsearch.yml配置文件中开启CORS:
    http.cors.enabled: true
    http.cors.allow-origin: "你的OJet项目地址" # 示例:http://localhost:8000
    http.cors.allow-headers: Authorization,Content-Type
    
  • 权限控制:如果ES开启了安全认证(比如X-Pack),要确保客户端配置的账号有目标索引的查询权限。
  • 查询优化:避免用match_all返回全量数据,根据业务需求编写精准的查询DSL,合理设置分页参数(from和size)。

内容的提问来源于stack exchange,提问作者Elva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:38:14