Solr - 如何将我自己的变换器导入solr-data-config.xml?

时间:2017-05-17 08:42:25

标签: java xml solr

我是Solr和Java的新程序员,我在使用自定义变换器时遇到了一些问题。我编写了一个自定义转换器来格式化MySQL中的数据,如下所示:

package foo;

import net.sf.json.JSONArray;
import org.apache.solr.handler.dataimport.Context;
import org.apache.solr.handler.dataimport.Transformer;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class TempleteTransformer extends Transformer{

    @Override
    public Object transformRow(Map<String, Object> map, Context context) {
        List<Map<String,String>> fieldlist = context.getAllEntityFields();
        for (Map<String,String> field : fieldlist){
            String trim = field.get("trim");
            if ("true".equals(trim)){
                String columnName = field.get("column");
                String value = String.valueOf(map.get(columnName));
                JSONArray ja = JSONArray.fromObject(value);
                List sl = JSONArray.toList(ja);
                List<String> strlist = new ArrayList<>();
                for (int i = 0; i < sl.size(); i++){
                    strlist.add((String) sl.get(i));
                }
                map.put(columnName,strlist);
            }
        }
        return map;
    }

}

我可以将这个项目打包为一个jar文件,但是我应该把这个jar放在哪里?

我如何在solr-data-config.xml中导入它?

我已阅读官方文档但未说明如何使用。

任何建议?

2 个答案:

答案 0 :(得分:0)

您有两种选择:

  1. 这是首选的方法:把它放在任何你喜欢的地方(即YOURFULLPATH,然后在solrconfig.xml中,你包括它:

    <lib dir="YOURFULLPATH" regex=".*\.jar" />
    

    如果您查看示例solrconfig.xml,您会看到使用的变体有不同,其中大部分都可以使用。

  2. 如果上述任何情况都不起作用,并且您不想进行故障排除,您可以将您的jar放入apache-solr \ server \ solr-webapp \ webapp \ WEB-INF \ lib \它也应该有用。

答案 1 :(得分:0)

server/solr/solr.xml文件中添加条目<str name='sharedLib'>和重新启动Solr。

例如:

<solr>

  <str name='sharedLib'>/opt/shared-lib</str>

  <solrcloud>

    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8983}</int>
    <str name="hostContext">${hostContext:solr}</str>

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
    <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
    <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>

  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>

</solr>

在目录/opt/shared-lib中放置您需要的jar文件。

这些jar文件将在所有核心中共享。

对于早于5.x的Solr版本,文件solr.xml位于$SOLR_HOME env var中,或通过java属性-Dsolr.solr.home配置。