Solr 4.2.1 - 使用DataImportHandler索引管道分离文件 - 2个问题

时间:2014-01-12 10:20:43

标签: solr dataimporthandler

我是Solr的新手并且在solr POC上工作。 我在StackOverflow上搜索了类似的问题,但找不到 我试图使用Solr 4.2.1索引包含管道(|)分隔数据的文本文件。以下是样本数据片段

cust_id|name1|name2|name3|dob|address|city|pincode|phone|idenfication|salary
1001000003|John|D|Doe|31081962|H-904, Green Mandion, M G Rd,   Santacruz(east)|mumbai|400056|9812030334|AMXPT7702P|50000.56
1001000005|Bob||Taylor|1041982|210, Greek Heights, Khar|mumbai|400057|976130321|AAXZZ2103P|20000.65

我正在使用dataimporthandler将数据导入Solr

我有两个问题

  1. 当我选择查询时
  2. 我收到了以下回复

    {
    'responseHeader'=>{
    'status'=>0,
    'QTime'=>0},
    'response'=>{'numFound'=>3,'start'=>0,'docs'=>[
    {
    'cust_id'=>'cust_id|name1|name2|name3|dob|address|city|pincode|phone|idenfication|salary'},
    {
    'cust_id'=>'1001000003|John|D|Doe|31081962|H-904, Green Mandion, M G Rd, Santacruz(east)|mumbai|400056|9812030334|AMXPT7702P|50000.56'},
    {
    'cust_id'=>'1001000005|Bob||Taylor|1041982|210, Greek Heights, Khar|mumbai|400057|976130321|AAXZZ2103P|20000.65'}]
    }}
    

    我如何将其转换为column:value,而不是作为一串数据,我的意思是

    {
    'responseHeader'=>{
    'status'=>0,
    'QTime'=>0},
    'response'=>{'numFound'=>3,'start'=>0,'docs'=>[
    
    {
    
    'cust_id'=>'1001000003',
    'name1' => 'John',
    'name2' => 'D',
    ......
    ......
    'salary' => 50000.56
    }
    
    ,
    {
    'cust_id'=>'1001000005,
    'name1' => 'Bob'
    ....
    'salary' => 20000.65
    }]
    }}
    

    我的配置文件如下

    <dataConfig>
    <dataSource name="dfs" encoding="UTF-8" type="FileDataSource" />
    <document>
    <entity name="sourcefile"
    processor="FileListEntityProcessor"
    newerThan="${dataimporter.last_index_time}"
    fileName="sample.txt"
    rootEntity="false"
    baseDir="C:/mfi_data/"
    header=true
    >
    
    <entity name="entryline"
    processor="LineEntityProcessor"
    url="${sourcefile.fileAbsolutePath}"
    rootEntity="true"
    dataSource="dfs"
    separator="|"
    transformer="RegexTransformer"
    
    >
    <field column="rawLine"
    regex="^(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)$"
    groupNames="cust_id,name1,name2,name3,dob,address,city,pincode,phone,idenfication,salary"
    />
    
    
    </entity>
    </entity>
    
    
    </document>
    </dataConfig>
    

    我的schema.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <schema version="1.5">
    <fields>
    <field name="cust_id" type="string" indexed="true" stored="true" />
    <field name="name1" type="string" indexed="true" stored="true" />
    <field name="name2" type="string" indexed="true" stored="true" />
    <field name="name3" type="string" indexed="true" stored="true" />
    <field name="dob" type="string" indexed="true" stored="true" />
    <field name="address" type="string" indexed="true" stored="true" />
    <field name="city" type="string" indexed="true" stored="true" />
    <field name="pincode" type="int" indexed="true" stored="true" />
    <field name="phone" type="string" indexed="true" stored="true" />
    <field name="identification" type="string" indexed="true" stored="true" />
    <field name="salary" type="float" indexed="false" stored="true" />
    <field name="rawLine" type="text" indexed="false" stored="false" multiValued="true" />
    
    </fields>
    <uniqueKey>cust_id</uniqueKey>
    <types>
    <fieldType name="string" class="solr.StrField" />
    <fieldType name="int" class="solr.TrieIntField" />
    <fieldType name="text" class="solr.TextField" />
    <fieldType name="float" class="solr.FloatField" />
    </types>
    </schema>
    
    1. 如何删除标题被视为要编入索引的数据? 我在dataConfig中尝试过Header =“true”,但那不起作用
    2. 如果你有办法解决这个问题请指导,提前谢谢?

1 个答案:

答案 0 :(得分:1)

Solr接受CSV(逗号分隔值)格式的索引更新。可配置不同的分隔符和转义机制,并支持多值字段。 http://wiki.apache.org/solr/UpdateCSV

分离器

指定用作字段分隔符的字符。默认值为separator =,

头 如果CSV输入的第一行包含字段或列名称,则为true。默认值为header = true。如果不存在fieldnames参数,则在将文档添加到索引时将使用这些字段名称。