Относительно плохо знаком с javascript и angular. Я использую экземплярasticsearch для загрузки / индексации различных файлов. Веб-приложение должно иметь возможность разрешать пользователю загружать несколько файлов, которые затем будут обрабатываться с использованием процессора загрузки и индексироваться в ES. Я использую angular-base64-upload для извлечения данных base64. Ниже я попробовал следующее.
HTML:
<div ng-switch-when="upload">
...
<input type="file" ng-model="obj.files" name="files"
base-sixty-four-input multiple>
...
<div ng-show="obj.files.length != 0">
<button class="btn btn-primary" type="submit" ng-click="ingest()">
Index All {{obj.files.length}} Files
</button> <br><br>
</div>
</div>
Код функции javascript ingest () в моем контроллере:
//Ingesting multiple files
$scope.obj = {files: []};
$scope.ingest = function () {
$scope.obj.files.forEach(function (file){
var fname = file.filename.replace(/\.[^/.]+$/, "");
var fdata = file.base64;
//Creating the pipeline
console.log('filename is: ' + fname);
$http({
url: 'http://192.168.100.30:9200/_ingest/pipeline/attachment',
method: "PUT",
data: {
"description" : "Indexing files",
"processors" : [
{
"set" : {
"field" : "filename",
"value" : fname
},
"attachment" : {
"field" : "data"
}
}
]
}
})
.then(function(allowed){
//Indexing the document
$http({
url: 'http://192.168.100.30:9200/my_index4/my_type/'+fname+'?pipeline=attachment', //unique ID for every document, ensures that there are no overlaps
method: "PUT",
data: {
"data": fdata
}
})
})
})
}
Журнал консоли используется только для отладки.
Проблема, с которой я сталкиваюсь, заключается в том, что Elastic хранит файл под правильным _id, который в моем случае является именем файла, но не хранит правильный field: filename
. Например, если я загружу 2 файла с именами hello.txt и world.txt, ES сохранит оба файла с hello
и world
в качестве соответствующих им _id
с, но поле filename
часто поменяется местами или просто обычно неверно. Я запускал код несколько раз, чтобы увидеть, был ли шаблон, и я не могу найти его.
console.log
s показывают, что fname
- это правильное имя файла перед первым http
, после него и после второго http
, поэтому я не совсем понимаю, почему процессор set
неправильно хранит его.
Возможно, я не очень четко объяснил проблему, так как она довольно запутанная. Дайте мне знать, если что-то требует дополнительного объяснения. Спасибо!