[solr ] 关于deltaImport增量更新产生的重复数据问题(不信没人遇到和我一样的问题)

wangxiaolongbob 2012-01-02

我经过第一次full import 之后已经成功导入数据(2个人): 
首先访问  http://localhost:8983/solr/XiaoLongTest/dataimport?command=full-import&clean=true 
然后访问  http://localhost:8983/solr/XiaoLongTest/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on 

Java代码  收藏代码
  1. <response>  
  2. <lst name="responseHeader">  
  3. <int name="status">0</int>  
  4. <int name="QTime">1</int>  
  5. <lst name="params">  
  6. <str name="indent">on</str>  
  7. <str name="start">0</str>  
  8. <str name="q">*:*</str>  
  9. <str name="version">2.2</str>  
  10. <str name="rows">10</str>  
  11. </lst>  
  12. </lst>  
  13. <result name="response" numFound="2" start="0">  
  14. <doc>  
  15. <str name="dtype">Teacher</str>  
  16. <str name="fullName">陈xx</str>  
  17. <long name="id">25</long>  
  18. </doc>  
  19. <doc>  
  20. <str name="dtype">Teacher</str>  
  21. <str name="fullName">蔡xx</str>  
  22. <long name="id">28</long>  
  23. </doc>  
  24. </result>  
  25. </response>  


然后我为这2个人建立联系人的关系,在数据库里面建立好了之后,我用deltaImport增量更新数据: 
首先访问  http://localhost:8983/solr/XiaoLongTest/dataimport?command=delta-import 
更新数据成功: 
Java代码  收藏代码
  1. <response>  
  2. <lst name="responseHeader">  
  3. <int name="status">0</int>  
  4. <int name="QTime">1</int>  
  5. <lst name="params">  
  6. <str name="indent">on</str>  
  7. <str name="start">0</str>  
  8. <str name="q">*:*</str>  
  9. <str name="version">2.2</str>  
  10. <str name="rows">10</str>  
  11. </lst>  
  12. </lst>  
  13. <result name="response" numFound="4" start="0">  
  14. <doc>  
  15. <arr name="connecter_id">  
  16. <long>28</long>  
  17. </arr>  
  18. <str name="dtype">Teacher</str>  
  19. <str name="fullName">陈xx</str>  
  20. <long name="id">25</long>  
  21. </doc>  
  22. <doc>  
  23. <arr name="connecter_id">  
  24. <long>25</long>  
  25. </arr>  
  26. <str name="dtype">Teacher</str>  
  27. <str name="fullName">蔡xx</str>  
  28. <long name="id">28</long>  
  29. </doc>  
  30. <doc>  
  31. <str name="dtype">Teacher</str>  
  32. <str name="fullName">陈xx</str>  
  33. <long name="id">25</long>  
  34. </doc>  
  35. <doc>  
  36. <str name="dtype">Teacher</str>  
  37. <str name="fullName">蔡xx</str>  
  38. <long name="id">28</long>  
  39. </doc>  
  40. </result>  
  41. </response>  


这明显出现了一个问题,就是当我进行deltaImport的时候老的数据还是存在,请问有没有谁遇到这个问题,有没有什么解决方案??? 
wangxiaolongbob 2012-01-02
我的data-config.xml里面的doc是这样写的:
<document>
		
		<entity name="Member" pk="id" query="select id,fullName,dtype,avatarUrl,fullNamePinyin,fullNameShoupin from Member where isDeleted=false" 
			deltaImportQuery="select id,fullName,dtype,avatarUrl,fullNamePinyin,fullNameShoupin from Member where id = '${dataimporter.delta.id}'" 
			deltaQuery="select id from Member where lastModifyTime > '${dataimporter.last_index_time}' and isDeleted=false"> 
			
			<entity name="connections" pk="master_id" query="select connecter_id from connection where master_id='${Member.id}' and isDeleted=false" 
				deltaQuery="select master_id from connection where lastModifyTime > '${dataimporter.last_index_time}' and isDeleted=false" 
				deletedPkQuery ="select id from Member where id='${connections.master_id}' and isDeleted=false"  
				parentDeltaQuery="select id from Member where id='${connections.master_id}' and isDeleted=false" >
			</entity>  
			
			
     	</entity>
	</document>

我感觉我的这个问题应该就是怎样删除索引的问题,可是我又不知道deletedPKQuery怎么用?请遇到过这个问题的老师帮我看看,谢谢了!!!

另外,我还有几个小问题,这里面的那个deltaImportQuery有什么用啊,我怎么没有感觉到他的用处啊??
yuhao_1202 2012-05-05
可能Solr不认为数据重复了。schema.xml里面配置的 <uniqueKey>id</uniqueKey>
字段,才是界定重复的标准。

增量导入的deltaQuery是用来确认有没有记录要导入的,一般只返回记录ID.
而deltaImportQuery是已经确认有记录要导入的情况下,用来获取要导入的记录所有属性的,是依据deltaQuery的ID来确定的。

意味着:deltaQuery返回了多少个ID,就会执行多少次deltaImportQuery
Global site tag (gtag.js) - Google Analytics