2014-01-12 5 views
1

Я новичок в Solr и работает над solr POC. Я искал StackOverflow для подобной проблемы, но не смог найти один Я пытаюсь использовать Solr 4.2.1 для индексации текстового файла, содержащего разделяемые данные pipe (|). Ниже приводится фрагмент данных выборкиSolr 4.2.1 - Индексирование разделяемого файла с использованием DataImportHandler - 2 Проблемы

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. Когда я делаю запрос на выборку

Получать следующий ответ

{ 
'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. Как удалить заголовок из соображений как данные, подлежащие индексированию? Я попытался Header = «истинный» в dataConfig но то не работает

Пожалуйста, руководство, если вы столкнулись способ обойти это, спасибо заранее?

ответ

0

Solr принимает обновления индекса в формате CSV (Comma Separated Values). Различные разделители и механизмы эвакуации настраиваются, поддерживаются многозначные поля. http://wiki.apache.org/solr/UpdateCSV

сепаратор

Определяет символ, чтобы действовать в качестве разделителя полей. По умолчанию is separator =,

header true, если первая строка ввода CSV содержит имена полей или столбцов. По умолчанию используется header = true. Если параметр fieldnames отсутствует, эти имена полей будут использоваться при добавлении документов в индекс.

+0

Мне удалось решить проблему с правильным выражением регулярного выражения – user3186900

+0

regex = "^ (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) \ | (. *) $ " У меня теперь сбежал разделитель труб, и все работает. – user3186900

+0

Привет, у меня такая же проблема. Где вы размещаете регулярное выражение? –

Смежные вопросы