Я использую Solr's php extension для взаимодействия с Apache Solr. Я индексирую данные из базы данных. Я хотел также индексировать содержимое внешних файлов (например, PDF-файлов, PPTX).Index pdf file content using Apache Solr
Логика для индексирования: Пусть schema.xml
имеет следующие поля, определенные:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="created" type="tlong" indexed="true" stored="true" />
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="filepath" type="text_general" indexed="false" stored="true"/>
<field name="filecontent" type="text_general" indexed="false" stored="true"/>
Однократная база данных может/не может иметь файл, сохраненный.
Поэтому, следуя мой код для индексации:
$post = stdclass object having the database content
$doc = new SolrInputDocument();
$doc->addField('id', $post->id);
$doc->addField('name', $post->name);
....
....
$res = $client->addDocument($doc);
$client->commit();
Далее, я хочу, чтобы добавить содержимое файла PDF в том же документе Solr, как указано выше.
Это curl
код:
$ch = curl_init('
http://localhost:8010/solr/update/extract?');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, array('myfile'=>'@'.$post->filepath));
$result= curl_exec ($ch);
Но, я думаю, я что-то не хватает. Я прочитал documentation, но я не могу понять способ извлечения содержимого файла, а затем добавить его в существующий SOLR документ в field: filecontent
EDIT # 1: Если я пытаюсь установить literal.id=xyz
в curl request, он создает новый файл solr, имеющий id=xyz
. Я не хочу создавать новый solr-документ. Я хочу, чтобы содержимое pdf было проиндексировано и сохранено как поле в ранее создаваемом solr-документе.
$doc = new SolrInputDocument();//Solr document is created
$doc->addField('id', 98765);//The solr document created above is assigned an id=`98765`
....
....
$ch = curl_init('
http://localhost:8010/solr/update/extract?literal.id=1&literal.name=Name&commit=true');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, array('myfile'=>'@'.$post->filepath));
$result= curl_exec ($ch);
Я хочу выше Solr документ (id = 98765
), чтобы иметь поле, в котором содержимое PDF индексируется & сохраняются.
Но запрос cURL (как указано выше) создает еще один новый документ (с id = 1
). Я не хочу этого.
Вы не поняли мой вопрос. Я сделаю индексацию. Поиск также успешный. При выполнении команды curl, указанной в вики, она добавляет ее как «новый» Solr Document. 'curl" http: // localhost: 8983/solr/update/extract? literal.id = doc1 & commit = true "-F" [email protected] "' -> эта команда добавляет новый файл solr doc, имеющий 'id = doc1 ', индексирует содержимое из' tutorial.html' и фиксирует его. Я хочу добавить содержимое html/pdf в качестве поля в ранее определенном solr doc, так что «новый» документ не создается, но поле добавляется к существующему. – xan
Вы хотите добавить несколько богатых документов в один документ Solr? Solr не позволяет нескольким богатым документам с одним документом, но вы можете закрепить документы вместе и подать их на solr. Проверьте SOLR-2332. Также вы можете проверить частичные обновления Solr для подачи документа в solr, который добавляется в многозначное поле. – Jayendra
№ Не много документов. '$ doc = new SolrInputDocument()' создает новый файл solr. Затем я добавляю к нему поля ('id',' name', 'title' и т. Д.). Только в этом документе я хочу добавить содержимое файла pdf. Но когда я запускаю запрос cURL (как в приведенном выше коде), он создает другой новый документ solr со своими собственными полями. – xan