Я только начал использовать Solr 6.0 на днях и имел скрипт для обновления индекса Solr с помощью php-скрипта с использованием curl. Но сейчас есть дубликаты записей, обновленные с помощью скрипта php ниже.Выдача обновления для Solr делает Duplicates
Схема прямо сейчас выглядит так: id (уникальное поле ключа), url, keywords, description, title.
Является ли это потому, что я не указал явное уникальное поле ключа в URL-адресе с помощью схемы?
Я хотел бы иметь URL как уникальный ключ, поэтому он не позволит Solr индексировать дубликаты при обновлении и перезаписывать, если это дубликат. Как ты делаешь это?
<?php
// apt-get install php5 libapache2-mod-php5 php5-curl
// curl 'http://localhost:8983/solr/update/csv?fieldnames=url,keywords,description,title&commit=true' -H 'Content-type:text/plain; charset=utf-8' --data-binary @$file
$SOLR_SERVER = '127.0.0.1';
$CORE = 'core1';
ob_start();
$callback = &$_REQUEST['fd-callback'];
$url = 'http://'. $SOLR_SERVER .':8983/solr/'. $CORE .'/update/csv?fieldnames=url,keywords,description,title&commit=true';
if (!empty($_FILES['fd-file']) and is_uploaded_file($_FILES['fd-file']['tmp_name'])) {
$name = $_FILES['fd-file']['name'];
$data = file_get_contents($_FILES['fd-file']['tmp_name']);
} else {
$name = urldecode(@$_SERVER['HTTP_X_FILE_NAME']);
$data = file_get_contents("php://input");
}
$header = array("Content-type:text/csv; charset=utf-8");
$post = $data;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
//curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_exec($ch);
curl_close($ch);
if ($ch) {
$output = 'Upload Success!';
}else {
$output = 'Upload did not work!';
}
// $opt = &$_REQUEST['upload_option'];
// isset($opt) and $output .= "\nReceived upload_option with value $opt";
if ($callback) {
header('Content-Type: text/html; charset=utf-8');
$output = addcslashes($output, "\\\"\0..\x1F");
echo '<!DOCTYPE html><html><head></head><body><script type="text/javascript">',
"try{window.top.$callback(\"$output\")}catch(e){}</script></body></html>";
} else {
header('Content-Type: text/plain; charset=utf-8');
echo $output;
}
?>
Благодарим вас за ответ. Можно ли использовать SchemaAPI для изменения уникального ключа? Я попробовал curl -X POST -H 'Content-type: application/json' --data-binary '{"add-field": {"name": "url", "type": "string", "stored" : true, "uniqueKey": true}} 'http: // localhost: 8983/solr/core1/schema, но это не сработало. –
Нет, это невозможно: https://issues.apache.org/jira/browse/SOLR-7242 - вы можете дублировать 'url' в поле 'id', чтобы взломать его сейчас. – MatsLindh