在$ http PUT请求中设置处理器未保存正确的数据

时间:2018-06-25 13:24:03

标签: javascript html angularjs elasticsearch

相对较新的javascript和angular。我正在使用Elasticsearch实例来摄取/索引不同的文件。该webapp应该具有允许用户上传多个文件的功能,然后将使用摄取处理器对其进行处理并编入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会将两个分别以helloworld分别作为_id的文件存储,但是{{1} }字段经常被交换,或者通常是不正确的。我已经多次运行该代码以查看是否存在一种模式,但我似乎并没有真正找到一个模式。

filename显示console.log是第一个fname之前,之后和第二个http之后的正确文件名,这就是我感到困惑的原因http处理器未正确存储的原因。

由于这个问题有点令人费解,所以我可能没有很好地清楚地解释这个问题。让我知道是否需要进一步说明。谢谢!

0 个答案:

没有答案