【问题标题】:SOLR DataImportHandler, how to treat Nested Entity as JSON ArraySOLR DataImportHandler,如何将嵌套实体视为 JSON 数组
【发布时间】:2013-11-22 11:54:24
【问题描述】:

我正在为 SOLR 和 SQL 数据导入而苦苦挣扎。 我需要索引来自 2 个表的数据,第一个是“masters”,第二个是“details”。这两个表之间的关系是 1 对 n 的,并且由两个表上的列 m_id 强制执行:

CREATE TABLE "masters" (m_id             NUMBER(10), 
                        m_code           VARCHAR2(100 CHAR), 
                        m_description    VARCHAR2(1000 CHAR),
                        PRIMARY KEY (m_id));

CREATE TABLE "details" (d_id             NUMBER(10), 
                        s_code           VARCHAR2(100 CHAR), 
                        s_description    VARCHAR2(1000 CHAR), 
                        m_id             NUMBER(10), 
                        PRIMARY KEY (d_id),
                        CONSTRAINT fk_details_masters FOREIGN KEY (m_id) REFERENCES "masters"(m_id));

我希望“masters”表中的每一行都有一个索引文档,每个文档都应该包含“details”表的数组。

我预想的结果是这样的:

master = {
 "ID": "1"
 "m_code": "master53",
 "m_description": "John Doe",
 "details": [ 
              {
               "d_code": "detail001",
               "d_description": "Shirts"
              },
              {
               "d_code": "detail002",
               "d_description": "Shoes"
              },
              {
               "d_code": "detail003",
               "d_description": "hats"
              }
            ]
}

但我只能制作这样的东西:

master = {
 "ID": "1",
 "m_code": "master53",
 "m_description": "John Doe",
 "d_code": ["detail001","detail002","detail003"],
 "d_description": ["Shirts","Shoes","hats"]
}

使用这样的配置:

<dataConfig>
  <dataSource type="JdbcDataSource" 
              driver="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@//dora64svil.icc.crifnet.com:1521/cbrisvil.dbcrif.net"
              user="CBBTC" 
              password="w4.gJ6Qf1p7Z_i4qFp3W_d"/>
  <document>
    <entity name="master" rootEntity="True"
            query="SELECT m_id, m_code, m_description from master">
        <field column="m_id" name="ID"/>
        <field column="m_code" name="m_code_s"/>
        <field column="m_description" name="m_description_s"/>
        <entity name="details"  rootEntity="False"
                query="SELECT d_code, d_description from details where = m_id '${master.m_id}'">
            <field column="d_code" name="d_code_ss"/>
            <field column="d_description" name="d_description_ss"/>
        </entity>
    </entity>
  </document>
</dataConfig>

我在配置和 schema.xml 字段定义方面玩了很多,但我找不到正确的方法。 (字段后缀“_s”和“_ss”的存在只是为了将正确的字段类型触发到架构中)

我想我要做的是给嵌套实体一个“名称”,错误在哪里? 我试图做的事情在概念上是错误的吗?

【问题讨论】:

    标签: sql solr entity dataimporthandler multirow


    【解决方案1】:

    您必须在 schema.xml 中将该字段设置为 multiValued=true

    【讨论】:

      【解决方案2】:

      Solr 从今天起不支持检索嵌套数据。

      最好的办法是使用fq=_root_:&lt;your_id&gt; 和结果分组。

      要实现结果分组,您需要添加一个字段,例如 type_s 并使用 TemplateTransformer 分别为其分配值“master”或“details”。

      您将实现的输出将是,

      "groupValue":master,
      doc: {
       "ID": "1"
       "m_code": "master53",
       "m_description": "John Doe",
      }
      
      "groupValue":"details",
       "docs":  
                    {
                     "d_code": "detail001",
                     "d_description": "Shirts"
                    },
                    {
                     "d_code": "detail002",
                     "d_description": "Shoes"
                    },
                    {
                     "d_code": "detail003",
                     "d_description": "hats"
                    }
      

      【讨论】:

        猜你喜欢
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-27
        • 2021-04-06
        • 1970-01-01
        相关资源
        最近更新 更多