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

基于3个Solr 6.6.3实例与单ZooKeeper,如何配置Cassandra数据导入处理器?

没问题,我帮你一步步搞定Solr 6.6.3配置DataImport Handler(DIH)从Cassandra集群抽取数据的事儿!结合你是SolrCloud(3个实例+1个ZK)的环境,下面是具体操作步骤:

1. 准备兼容的Cassandra依赖包

Solr本身不带Cassandra的Java驱动,得自己加。你需要下载兼容Solr 6.6.3和你的Cassandra版本的驱动包,推荐用DataStax的官方驱动:

  • 核心驱动包:cassandra-driver-core-3.11.0.jar(适配Cassandra 3.x系列,和Solr 6.6.3的Java 8环境兼容)
  • 辅助依赖:guava-19.0.jar(Solr 6.x内置的guava版本是19,避免版本冲突)
  • 可选:如果Cassandra用了认证,可能还需要cassandra-driver-extras-3.11.0.jar

把这些包放到每个Solr实例的server/lib/ext目录下;如果是SolrCloud模式,也可以把这些包放到配置集的lib目录里,然后上传到ZK,这样所有节点都会加载。

2. 配置Solr的DIH处理器

在你的Solr配置集的solrconfig.xml里添加DIH的请求处理器,同时确保依赖包被正确加载:

<!-- 加载Cassandra驱动包(如果没放到ext目录,就指定你的lib路径) -->
<lib dir="${solr.config.dir}/lib" regex="cassandra-driver-.*\.jar" />
<lib dir="${solr.config.dir}/lib" regex="guava-.*\.jar" />

<!-- 配置DataImport Handler -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">data-config.xml</str> <!-- 指定DIH的配置文件 -->
  </lst>
</requestHandler>
3. 编写DIH核心配置文件(data-config.xml)

在配置集目录下创建data-config.xml,这是定义数据源和数据抽取规则的核心文件:

<dataConfig>
  <!-- 配置Cassandra数据源 -->
  <dataSource 
    type="org.apache.solr.handler.dataimport.CassandraDataSource"
    cluster="192.168.1.10:9042,192.168.1.11:9042" <!-- 你的Cassandra集群接触点,多个用逗号分隔 -->
    keyspace="your_target_keyspace" <!-- 要抽取数据的Cassandra键空间 -->
    username="your_cassandra_user" <!-- 如果Cassandra开启了认证,填用户名 -->
    password="your_cassandra_pwd" /> <!-- 对应密码 -->

  <!-- 定义要导入的文档结构 -->
  <document>
    <!-- 实体:对应Cassandra的一张表 -->
    <entity 
      name="your_cassandra_table"
      <!-- 全量导入查询:获取表中所有数据 -->
      query="SELECT id, product_name, category, price, create_time FROM your_cassandra_table"
      <!-- 增量导入查询:获取上次索引后更新的数据(需要有时间戳/递增字段) -->
      deltaQuery="SELECT id FROM your_cassandra_table WHERE create_time > '${dataimporter.last_index_time}'"
      <!-- 增量导入详情查询:根据deltaQuery返回的ID获取完整数据 -->
      deltaImportQuery="SELECT id, product_name, category, price, create_time FROM your_cassandra_table WHERE id = '${dataimporter.delta.id}'">

      <!-- 字段映射:Cassandra列名 → Solr字段名 -->
      <field column="id" name="id"/>
      <field column="product_name" name="product_name"/>
      <field column="category" name="category"/>
      <field column="price" name="price" type="float"/>
      <field column="create_time" name="create_time" type="pdate"/>
    </entity>
  </document>
</dataConfig>

注意:如果不需要增量导入,可以删掉deltaQuery和deltaImportQuery这两行;增量导入的前提是你的Cassandra表有可以判断更新的字段(比如时间戳)。

4. 同步Solr Schema与Cassandra字段

确保你的Solr Schema(managed-schema或schema.xml)里已经定义了对应Cassandra列的字段,类型要匹配:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="product_name" type="text_general" indexed="true" stored="true"/>
<field name="category" type="string" indexed="true" stored="true"/>
<field name="price" type="float" indexed="true" stored="true"/>
<field name="create_time" type="pdate" indexed="true" stored="true"/>
5. 上传配置到ZK(SolrCloud模式)

因为你是SolrCloud环境,需要把修改后的配置集上传到ZooKeeper,让所有Solr节点同步:

# 用Solr的zk命令上传配置,替换成你的实际路径和ZK地址
bin/solr zk upconfig -n your_configset_name -d /path/to/your/config_dir -z zk_host:2181

如果已经有对应的collection,需要重启collection让新配置生效:

bin/solr collection --reload your_collection_name
6. 测试数据导入
  • 打开Solr Admin UI,进入对应collection的Dataimport页面
  • 选择your_cassandra_table实体,先试试Full-Import全量导入,点击Execute
  • 查看页面的日志输出,或者去Solr的日志文件server/logs/solr.log里检查是否有错误
  • 导入完成后,用Solr的查询页面验证数据是否成功导入
常见问题排查
  • 如果出现Cassandra连接失败:检查集群地址是否正确、Cassandra服务是否正常、防火墙是否开放9042端口
  • 如果出现依赖冲突:检查guava版本是否和Solr内置的一致(Solr 6.6.3用的是guava 19)
  • 如果增量导入不生效:确认deltaQuery里的时间字段格式和Solr的last_index_time格式匹配,Cassandra里的时间字段是timestamp类型的话,格式要对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:29:01