工作问题:###
在一个站内搜索项目中在进行搜索结果的测试时,发现某个模块的相关表中是存在数据的,但是却查询不到一条结果。
通过solr的admin后台管理系统进行查询,也是一样查询不到数据,那就是说明这个模块的数据并没有被索引到索引文档库中
解决步骤:###
1、首先确定该模块的配置文件内容没有写错。先将其他搜索模块的配置文件内容注释掉,只索引该模块的数据。发现可以正常的索引到索引库中,而且查询得到该模块的相关数据。因此配置文件内容是没有错的
2、将其他搜索模块的配置文件内容取消注释,再进行重建索引,发现这个模块的数据没有索引到索引库中,查询不到有关数据。问题复现。
3、此时在solr的admin页面上发现一个问题,deleted docs
【当前core中被删除掉的数据】有1623条。被删除数据的原因最大的可能性是是多张表中的数据采用了相同的id,索引数据被重复id的数据覆盖,最终导致core只剩下5320条文档。
4、查阅资料。资料上说单核的solr是把所有的数据存储在在一个文件中。schema.xml这个文件可以设置主键(一定要有主键),默认是id。因此data-confing.xml,文件定义每张表时也指定了主键。如果有多个entity时就要注意id的唯一性,因为多个entity生成的索引数据是存储在一个文件中的,所以要防止主键重复的问题。如果主键重复,solr不会进行报错,如果出现相同ID的文档,则后一条覆盖前一行。
5、解决主键重复的问题,那就在每个entity的主键添加上一个不同的标识
,比如A模块的主键就修改为A_id,B模块的主键就修改为B_id的格式。这样添加上前缀,就能保证主键的不重复了。
6、修改完成后,重建索引,发现能正确的查询到该模块的数据。