我在MySQL DB中有一个View,并使用DIH构建了一个Solr索引的POC。在我的直接选择查询中,有6条记录,但Solr查询只返回了4条(尽管它确实说它已经获取了6条记录)。
MySql视图
CREATE VIEW FORUMS_SURVEYS AS
SELECT F.TITLE, F.DESCRIPTION, F.CREATED, FC.TYPE, FC.SUBTYPE FROM FORUM F JOIN FORUM_CATEGORY FC ON F.FORUM_CATEGORY_ID=FC.ID
UNION ALL
SELECT S.TITLE, S.DESCRIPTION, S.DATED AS CREATED, "" AS TYPE, "" AS SUBTYPE FROM SURVEY S;
从 "视图 "中选择
select * from FORUMS_SURVEYS;
Result - Fetched Rows: 6 (as expected)
在Solr上运行DIH,具体操作如下
db-data-config.xml
<dataConfig>
<dataSource driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/bjm" user="<user>" password="<password>" />
<document>
<entity name="forums_surveys" query="SELECT * FROM forums_surveys" transformer="HTMLStripTransformer">
<field column="TITLE" name="title" indexed="true" type="text" />
<field column="DESCRIPTION" name="description" indexed="true" type="text" stripHTML="true"/>
<field column="CREATED" name="created" indexed="true" type="text" />
<field column="TYPE" name="type" indexed="true" type="text" />
<field column="SUBTYPE" name="subtype" indexed="true" type="text" />
</entity>
</document>
</dataConfig>
在用户界面管理上,DataImport的结果是
Last Update: 16:13:12
(Duration: 01s)
Requests: 1 1/s, Fetched: 6 6/s, Skipped: 0 , Processed: 0
Started: 42 minutes ago
再次,好看到文字 "取。6"
然而,当我从UI Admin中用query Params q=title:*查询结果时,事情就变得不愉快了(注意响应> numFound下面JSON中的字段)。
"responseHeader":{
"status":0,
"QTime":8,
"params":{
"q":"title:*",
"_":"1587565922553"}},
"response":{"numFound":4,"start":0,"docs":[
//removed the 4 records for brevity
]
你需要有一个唯一字段,可以是id。这个唯一字段是需要保持solr的文档的唯一性。
这个 "唯一 "字段是需要保持solr文件的唯一性的。uniqueKey
元素指定哪个字段是文档的唯一标识符。虽然uniqueKey不是必需的,但您的应用程序设计几乎总是需要它。
例如: uniqueKey
如果您将更新索引中的文档,则应使用该字段。
你可以通过命名来定义唯一键字段。
<uniqueKey>id</uniqueKey>