У меня есть простой файл test.csv, в котором есть следующие данные

id,author,title
1,sanjay,ABC
2,vijay,XYZ

Я хочу проиндексировать этот файл в solr и передать ему уникальный идентификатор, называемый id = 1, чтобы иметь возможность запрашивать этот документ в будущем (что означает все значения, т.е. эквивалентные select * from table-name), и аналогичным образом хочу проиндексировать многие такие файлы с идентификатором документа, например id = 2, id = 3 и т. д.

В моем schema.xml id - это поле

 <field name="id" type="string" indexed="true" stored="true" />

А также

 <!-- Field to use to determine and enforce document uniqueness.
  Unless this field is marked with required="false", it will be a required field
 -->
 <uniqueKey>id</uniqueKey>

И в тех случаях, когда id не существует в файле, но я хочу передать id в качестве параметра для уникальности уровня документа, он выдает следующую ошибку

 [root@****ltest1 garyTestDocs]# curl  http://localhost:8983/solr/update/csv?id='SL1' --data-binary @sample.csv -H    'Content-type:text/plain; charset=utf-8'
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>Error 400 [doc=null] missing required field: ref</title> 
 </head>
 <body><h2>HTTP ERROR 400</h2> 
 <p>Problem accessing /solr/update/csv. Reason:
 <pre>    [doc=null] missing required field: id</pre></p><hr /><i><small>Powered by  Jetty://</small></i><br/>                                                
 <br/>                                                
 <br/>                                                
 <br/>                                                
 <br/>                                                
 <br/>                                                
 <br/>                                                

 </body>
 </html>

Таким образом, по сути, существует два сценария: проиндексируйте приведенный выше образец файла со столбцом id внутри файла, а другой сценарий - со столбцом id. Но в обоих сценариях мне нужно передать уникальный идентификатор уровня документа, то есть id = '1' или id = '2'.

Не могли бы вы объяснить свой ответ с помощью этих двух сценариев и синтаксиса curl и schema.xml (только необходимые поля)

0
Sanjay Rao 11 Май 2013 в 02:07

1 ответ

Лучший ответ

В Solr представьте schema.xml как таблицу БД. Чтобы сохранить уникальность строк, у нас есть столбец с первичным ключом. Обычно как столбец id, в котором есть уникальные значения. Когда вы индексируете документы в solr, например, для файла csv в моем случае, в котором есть столбцы. столбец id должен быть уникальным и не может содержать пустых строк. есть много способов создать уникальные строки, но, например, я использовал формат file_name_1 ... (имеет ряд заливок, например 1,2,3 ...). Это единственный способ указать уникальность записей в solr. у вас не может быть уникальности на уровне документа, что означает невозможность предоставить уникальный ключ во время индексации. Итак, в schema.xml у вас есть уникальный ключевой тег, который представляет собой не что иное, как столбец в вашем документе, который будет уникальным.

Qry для индексации файла csv выглядит следующим образом: -

Curl http: //: 8983 / solr / update / csv --data-binary @ Sample.csv -H 'Content-type: text / plain; charset = utf-8 '

Schema.xml будет иметь идентификатор col

 <field name="id" type="string" indexed="true" stored="true" />

Некоторые из столбцов в моих документах

 <field name="author" type="text" indexed="true" stored="true" />
 <field name="title" type="text" indexed="true" stored="true" />


 <uniqueKey>id</uniqueKey>

Во время индексации я не использовал уникальный идентификатор уровня документа. Надеюсь, я ответил на свой вопрос!

0
Sanjay Rao 15 Май 2013 в 20:42