Apache Solr中数据值的字段名称

时间:2015-08-06 12:22:03

标签: solr

我在Solr中有2个用于索引的SQL表:

项目参数

在表格项目中 - 2个字段:

ID 名称

在表格参数中 - 3个字段:

item_id param_name param_value

所以我有配置:

<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"
}

但我希望对象是:

e.Row.Attributes["onclick"] = "__doPostBack('" + this.UniqueID + "$" + gvUserList.ID + "', 'Select$" + e.Row.RowIndex + "')";

我该怎么做?字段名称必须取自其中一个结果值。我找不到任何这样的例子。

2 个答案:

答案 0 :(得分:1)

你需要在solr中使用动态字段,配置应该支持。您可以使用this在配置中使用变换器,然后将其编入索引。

答案 1 :(得分:0)

找到解决方案!!  在数据配置中为数据添加脚本转换器:

<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:

<dynamicField name="*" type="string" indexed="true"  stored="true"/>