【问题标题】:Solr Data Import Handler (DIH) fails to Index all the records from MySQL ViewSolr 数据导入处理程序 (DIH) 无法索引 MySQL 视图中的所有记录
【发布时间】:2020-04-22 15:35:45
【问题描述】:

我在我的 MySQL 数据库中有一个视图,并使用 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>

在 UI Admin 上,DataImport 的结果

Last Update: 16:13:12

(Duration: 01s)
Requests: 1 1/s, Fetched: 6 6/s, Skipped: 0 , Processed: 0 
Started: 42 minutes ago

再次,很高兴看到文本“Fetched: 6”

但是,当我使用查询 Params q=title:* 从 UI Admin 查询结果时,事情变得不愉快(请注意响应中的 JSON 字段 > numFound)

"responseHeader":{
    "status":0,
    "QTime":8,
    "params":{
      "q":"title:*",
      "_":"1587565922553"}},
  "response":{"numFound":4,"start":0,"docs":[
//removed the 4 records for brevity
]

【问题讨论】:

  • 在您的情况下,唯一 id 是什么?...您在 schema.xml 中配置了什么?您的文档需要有唯一的字段。
  • 我在您选择的 id 字段或定义行唯一性的字段中没有看到任何字段
  • 你找到id字段并解决了这个吗?
  • @AbhijitBashetti。谢谢你的cmets。我必须弄清楚从 View 中确定记录的 ID 字段,应该尝试我脑海中的几个想法,然后按照这些想法更新帖子。
  • 是的,请...问题似乎是唯一ID

标签: solr dih


【解决方案1】:

您需要有一个可以是 id 的唯一字段。需要 unique 字段来保持 solr 的文档的唯一性。

uniqueKey 元素指定哪个字段是文档的唯一标识符。虽然 uniqueKey 不是必需的,但它几乎总是由您的应用程序设计保证。

例如,如果您要更新索引中的文档,则应使用uniqueKey

您可以通过命名来定义唯一键字段:

<uniqueKey>id</uniqueKey>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多