SOLR如何为每个字段具有多个可能值的字段定义数据导入处理程序?

时间:2017-09-22 12:03:07

标签: database indexing solr multivalue

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

例如,从一个商店我有3列: ID,NAME,PRODUCTS_ID 。 PRODUCTS_ID每个商店可能有多个值。我如何索引到SOLR这样的文档。我必须为每个products_id创建一个文档(之后我需要以某种方式使结果不同)或者我可以用另一种方式来呈现此结果吗?我看到有 multiValued 配置,但有最好的方法吗?

2 个答案:

答案 0 :(得分:1)

1)在schema.xml中,您的字段必须是mulitvalued。实施例

<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

答案 1 :(得分:0)

这里是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