【问题标题】:SOLR how to define the data import handler for fields having several possible values per field?SOLR 如何为每个字段具有多个可能值的字段定义数据导入处理程序?
【发布时间】:2018-03-04 00:17:39
【问题描述】:

我想从我的数据库数据创建一个索引。 目前我使用 SQL 视图从基础中提取数据。 在我的结果中,每个结果都有一个唯一 ID,每个结果可以包含多个可能的另一个 ID,用于我需要搜索的列之一。

例如,我在一家商店有 3 列:ID、NAME、PRODUCTS_ID。 PRODUCTS_ID 每个商店可能有多个值。我如何索引 SOLR 这样的文档。我必须为每个 products_id 创建一个文档(然后我需要以某种方式区分结果)还是我可以使用另一种方式来呈现这个结果?我看到有 multiValued 配置,但是有没有最好的方法呢?

【问题讨论】:

    标签: database indexing solr multivalue


    【解决方案1】:

    这里是 Simas_ch 提出的解决方案的实现。

    db-data-config.xml 中定义:

    <dataConfig>
       <dataSource name="jdbc" driver="***" 
          url="jdbc:****" 
          user="***" password="***"/>
       <document>
        <entity name="operation" transformer="RegexTransformer"
            pk="ID"
            query="SELECT * FROM GRC.V_SOLR_REGISTRAR_FR_CATALOG@GRCLINK" 
        >
           <field column="fieldDB" splitBy="," sourceColName="fieldSolr"/>
    

    重要的是放置 transformer="RegexTransformer"splitBy=","sourceColName="TOP_SERVICE_ID"

    schema.xml 中定义为之前描述的字段:

    <field name="fieldSolr" type="int" indexed="true" stored="true" multiValued="true"/>
    

    multiValued 很重要。

    并在 SQL 查询 中进行连接:

    LISTAGG(test, ',') WITHIN GROUP (ORDER BY test) AS fieldDB
    

    【讨论】:

      【解决方案2】:

      1) 在 schema.xml 中,您的文件必须是多值的。示例

      <field name="specialDeliveryTimes" type="int" stored="true" indexed="true" multiValued="true"/>
      

      2) 在 SQL 语句中必须用 连接值,使用 Oracle 的示例:

      LISTAGG(AOP_LOCATIONID, ',') WITHIN GROUP (ORDER BY AOP_LOCATIONID) AS SPECIALDELIVERYTIMES
      

      【讨论】:

      • 非常感谢,下周我会试试这个解决方案。
      • 我们正在为我们的电子商务商店使用这个解决方案。效果很好。
      • 谢谢你的例子。它对我有用,只是我需要添加一些额外的代码。我会把它放在这里。
      猜你喜欢
      • 2021-11-09
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      相关资源
      最近更新 更多