我想从我的数据库数据创建索引。 目前我使用SQL视图从基础中提取数据。 在我的搜索结果中,每个结果都有一个唯一的ID,每个结果可能包含几个可能的其他ID ,用于我需要搜索的列之一。
例如,从一个商店我有3列: ID,NAME,PRODUCTS_ID 。 PRODUCTS_ID每个商店可能有多个值。我如何索引到SOLR这样的文档。我必须为每个products_id创建一个文档(之后我需要以某种方式使结果不同)或者我可以用另一种方式来呈现此结果吗?我看到有 multiValued 配置,但有最好的方法吗?
答案 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