Solr data-config实体查询失效,city字段无法按规则映射
解决Solr导入时City字段逻辑不生效的问题
核心解决思路
放弃子实体配置,直接在主实体的查询语句中集成字段逻辑,同时排查映射、缓存和数据库兼容性问题:
修改主实体查询语句
把你验证过的SQL直接放到data-config.xml的主entity的query属性中,避免子实体的字段覆盖或加载顺序问题:<entity name="objs" query="SELECT IIF(o.citygeonameid=0, o.city, c.name) as city, o.id, [其他需要索引的字段] FROM objs o LEFT JOIN cities c on c.geonameid=o.citygeonameid"> <!-- 确保这里没有旧的city字段映射,或者只保留对应别名的映射 --> <field column="city" name="city"/> <!-- 其他字段映射 --> </entity>检查字段映射配置
- 彻底删除或注释原
objs实体中指向objs.city的旧字段映射 - 确认新查询返回的
city别名与Solr Schema中定义的字段名完全匹配
- 彻底删除或注释原
清理索引并重新导入
- 先清空现有索引:
curl http://localhost:8983/solr/[你的Core名称]/update?commit=true&stream.body=<delete><query>*:*</query></delete> - 重启Solr服务,确保配置加载生效
- 执行全量导入,观察导入过程无异常
- 先清空现有索引:
验证SQL执行日志
查看Solr的solr.log日志文件,搜索dataimport关键词,确认实际执行的SQL语句是你修改后的版本,且数据库查询返回了正确的city值适配数据库函数语法
若使用MySQL等不支持IIF函数的数据库,替换为对应语法:SELECT IF(o.citygeonameid=0, o.city, c.name) as city, ... FROM objs o LEFT JOIN cities c on c.geonameid=o.citygeonameid确保Solr使用的数据库账号权限与你测试时一致,能正常访问两张表
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

