Я работаю с Solr 6.6.0, используя Solr PHP клиент. Я добавляю документы, используя приведенный ниже код, и он работает правильно:
foreach ($data as $key => $value) {
$docs['doc_no'.$i]['id'] = $value['id'];
$docs['doc_no'.$i]['name'] = $value['name'];
$docs['doc_no'.$i]['sub_title'] = strip_tags($value['sub_title']);
$docs['doc_no'.$i]['small_image'] = $value['small_image'];
$docs['doc_no'.$i]['project_type'] = $value['project_type'];
$docs['doc_no'.$i]['project_status'] = $value['project_status'];
$docs['doc_no'.$i]['logo'] = $value['logo'];
$docs['doc_no'.$i]['price'] = $value['price'];
$docs['doc_no'.$i]['url'] = $value['url'];
$docs['doc_no'.$i]['flat_type_desc'] = $value['flat_type_desc'];
$docs['doc_no'.$i]['project_config'] = $value['project_config'];
$docs['doc_no'.$i]['address'] = $value['address'];
$docs['doc_no'.$i]['location'] = $value['location'];
$i++;
}
//print_r($docs);exit;
$documents = array();
foreach($docs as $item => $fields) {
$part = new Apache_Solr_Document();
foreach ( $fields as $key => $value ) {
if ( is_array( $value ) ) {
foreach ( $value as $data ) {
$part->setMultiValue( $key, $data );
}
}
else{
$part->$key = $value;
}
}
$documents[] = $part;
}
try {
$solr->addDocuments( $documents );
$solr->commit();
$solr->optimize();}
catch ( Exception $e ) {
echo $e->getMessage();
}
После выполнения приведенного выше кода я должен вручную перезапустить solr через строку cmd, и затем это отражается, я хочу спросить, каждый раз, когда я добавляю какие-либо документы в solr, тогда мне приходится перезапускать solr вручную? Есть ли другой способ перезапустить Solr автоматически, как только у меня есть данные в документах.
Любая помощь будет оценена Спасибо заранее.
Чтобы отправленные документы были видны в индексе, вы должны выполнить коммит и попросить открыть нового читателя (это обычно обрабатывается для вас, так что обычно это не требуется. Как вы это делаете в платформе Drupal) Я понятия не имею, но я предполагаю, что у вашего клиента Solr есть commit
метод или что-то подобное. Я попытался найти документацию по API, но ничего не получилось, кроме _Document
учебный класс.
После принятия коммита изменения индекса будут видны в течение нескольких секунд, или в случае мягкого коммита (когда изменения не сохраняются на диске раньше) почти мгновенно.
Вы также можете попросить commitWithin
интервал при отправке документов, но это также будет зависеть от того, как клиент, который вы используете, работает для того, как вы включаете этот параметр.
Других решений пока нет …