установить процессор в запросе $ http PUT без сохранения правильных данных - PullRequest
0 голосов
/ 25 июня 2018

Относительно плохо знаком с 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 неправильно хранит его.

Возможно, я не очень четко объяснил проблему, так как она довольно запутанная. Дайте мне знать, если что-то требует дополнительного объяснения. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...