Apache Solr 中数据值的字段名称
Field name from data values in Apache Solr
我有 2 SQL tables 用于在 Solr 中建立索引:
项目和参数
在 table 项中 - 2 个字段:
id 和 name
在 table 参数中 - 3 个字段:
item_id、param_name 和 param_value
所以我在配置中有:
<document>
<entity name="item" query="select * from items" >
<field column="id" name="id" />
<field column="name" name="name" />
<entity name="params"
query="select param_name, param_value from items where item_id ='${item.id}'">
<field name="param_value" column="param_value" />
</entity>
</entity>
</document>
我有架构:
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="param_value" type="string" indexed="true" stored="true" multiValued="true"/>
对象的结果将是:
{
"id":"894",
"name":"item_name1",
"param_value":[
"param_value1",
"param_value2",
"param_value3",
"param_value4"
]
}
但我希望对象是:
{
"id":"894",
"name":"item_name1",
"param_name1":"param_value1",
"param_name2":"param_value2",
"param_name3":"param_value3",
"param_name4":"param_value4"
}
我该怎么做?字段名称必须取自结果值之一。我找不到任何示例来执行此操作。
您需要 solr 中的动态字段,并且配置应该支持它。您可以使用 this 在配置中使用转换器,然后对其进行索引。
找到解决方案!!
在数据配置中为数据添加脚本转换器:
<dataConfig>
<script><![CDATA[
function FieldValueProcess(row) {
var row_id = ""+row.get('param_name');
var row_data = ""+row.get('param_value');
row.put(row_id, row_data);
row.remove('param_name');
row.remove('param_value');
return row;
}
]]></script>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/xxx"
user="xx"
password="xxx"/>
<document>
<entity name="item" query="select * from items" >
<entity name="params" transformer="script:FieldValueProcess"
query="select param_name, param_value from items where item_id ='${item.id}'">
</entity>
</entity>
</document>
</dataConfig>
在schema.xml中添加动态字段:
<dynamicField name="*" type="string" indexed="true" stored="true"/>
我有 2 SQL tables 用于在 Solr 中建立索引:
项目和参数
在 table 项中 - 2 个字段:
id 和 name
在 table 参数中 - 3 个字段:
item_id、param_name 和 param_value
所以我在配置中有:
<document>
<entity name="item" query="select * from items" >
<field column="id" name="id" />
<field column="name" name="name" />
<entity name="params"
query="select param_name, param_value from items where item_id ='${item.id}'">
<field name="param_value" column="param_value" />
</entity>
</entity>
</document>
我有架构:
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="param_value" type="string" indexed="true" stored="true" multiValued="true"/>
对象的结果将是:
{
"id":"894",
"name":"item_name1",
"param_value":[
"param_value1",
"param_value2",
"param_value3",
"param_value4"
]
}
但我希望对象是:
{
"id":"894",
"name":"item_name1",
"param_name1":"param_value1",
"param_name2":"param_value2",
"param_name3":"param_value3",
"param_name4":"param_value4"
}
我该怎么做?字段名称必须取自结果值之一。我找不到任何示例来执行此操作。
您需要 solr 中的动态字段,并且配置应该支持它。您可以使用 this 在配置中使用转换器,然后对其进行索引。
找到解决方案!! 在数据配置中为数据添加脚本转换器:
<dataConfig>
<script><![CDATA[
function FieldValueProcess(row) {
var row_id = ""+row.get('param_name');
var row_data = ""+row.get('param_value');
row.put(row_id, row_data);
row.remove('param_name');
row.remove('param_value');
return row;
}
]]></script>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/xxx"
user="xx"
password="xxx"/>
<document>
<entity name="item" query="select * from items" >
<entity name="params" transformer="script:FieldValueProcess"
query="select param_name, param_value from items where item_id ='${item.id}'">
</entity>
</entity>
</document>
</dataConfig>
在schema.xml中添加动态字段:
<dynamicField name="*" type="string" indexed="true" stored="true"/>