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

Solr 8.2查询仅返回title字段,DIH导入数据库文档异常

解决Solr DIH导入后仅返回title字段的问题

从你的配置和报错信息来看,主要有两个核心问题导致first_author等字段无法正常返回,咱们一步步拆解解决:

1. 修正Data Config中的字段映射错误

你的db_data_config.xml里犯了一个关键的属性使用错误:<field>标签应该用name来指定Solr Schema中对应的字段名,而不是title。这个错误直接导致DIH没有把数据库的first_author字段正确映射到Solr的同名字段上,相当于白导入了这些字段。

修正后的db_data_config.xml:

<dataConfig>
  <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password=""/>
  <document>
    <entity name="publication" pk="publication_id" query="select * from publication" >
      <field column="publication_id" name="publication_id"/>
      <field column="title" name="title"/>
      <field column="first_author" name="first_author"/>
      <!-- 如果你需要其他字段(比如pubmed_id、date),按同样格式添加即可 -->
      <field column="pubmed_id" name="pubmed_id"/>
      <field column="date" name="date"/>
    </entity>
  </document>
</dataConfig>

另外,entity标签里的title属性是多余的,直接删掉就行,保留name和pk属性就足够了。

2. 清理数据中的特殊不可见字符

你提到的SolrWriter错误里出现了&amp;#8203;,这是**零宽空格(ZERO WIDTH SPACE)**的HTML转义字符,这种看不见的字符会干扰Solr的文档解析逻辑,导致字段无法正常存储。

可以在DIH中添加RegexTransformer来批量清理这些特殊字符:

带字符清理的db_data_config.xml:

<dataConfig>
  <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password=""/>
  <document>
    <entity name="publication" pk="publication_id" query="select * from publication" 
            transformer="RegexTransformer">
      <!-- 清理字段中的零宽空格及其他不可见空白字符 -->
      <field column="first_author" name="first_author" regex="[\u200B\u200C\u200D\uFEFF]" replacement=""/>
      <field column="title" name="title" regex="[\u200B\u200C\u200D\uFEFF]" replacement=""/>
      <field column="publication_id" name="publication_id"/>
      <!-- 其他需要清理的字段同理添加规则 -->
    </entity>
  </document>
</dataConfig>

这个正则会匹配常见的不可见空白字符,直接替换为空字符串,确保导入的数据干净无干扰。

3. 补充Schema中缺失的字段配置

你的managed_schema目前只定义了first_author、id、title,如果需要返回publication_id、pubmed_id等其他字段,必须在Schema中添加对应的字段定义,比如:

<field name="publication_id" type="int" indexed="true" stored="true"/>
<field name="pubmed_id" type="int" indexed="true" stored="true"/>
<field name="date" type="date" indexed="true" stored="true"/>

一定要确保每个需要查询返回的字段都设置了stored="true",否则Solr不会把该字段的数据存在索引里,自然查不到。

最后执行步骤

  1. 保存所有修改后的配置文件
  2. 重启Solr服务让配置生效
  3. 到DataImport页面执行全量导入(Full-Import)
  4. 再次执行查询验证,应该就能看到first_author和其他配置好的字段了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:31:23