当前位置:  开发笔记 > 前端 > 正文

将文档从AngularJS发布到SOLR 4

如何解决《将文档从AngularJS发布到SOLR4》经验,为你挑选了1个好方法。


我对此深陷兔子洞.我正在创建一个简单的应用程序,它使用SOLR 4作为NoSQL数据存储区,使用AngularJS v1.2.2作为接口.我从命令行加载了一堆文件,AngularJS使搜索/查看这些文件变得非常容易.我想允许文档编辑,但无法使POST工作.Chrome控制台显示400个错误,"网络"标签显示OPTIONS方法失败.

网络标题:
Request URL:http://localhost:8983/solr/mrm_assay/update Request Method:OPTIONS Status Code:400 Bad Request Request Headers Accept:*/* Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8,es;q=0.6 Access-Control-Request-Headers:accept, content-type Access-Control-Request-Method:POST Cache-Control:no-cache Connection:keep-alive Host:localhost:8983 Origin:http://localhost:63342 Pragma:no-cache Referer:http://localhost:63342/angular-solr2/app/index.html User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 Response Headers Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:origin, content-type, cache-control, accept, options Access-Control-Allow-Methods:GET,POST,DELETE,PUT,HEAD,OPTIONS Access-Control-Allow-Origin:http://localhost:63342 Access-Control-Max-Age:1800 Content-Type:application/xml; charset=UTF-8 Transfer-Encoding:chunked

架构快速概述:
SOLR和AngularJS应用程序都在我的Mac上运行.SOLR使用默认的Jetty实例,Angular应用程序在WebStorm IDE的服务器内运行.CORS已启用,包括GET,POST,DELETE,PUT,HEAD,OPTIONS.

更新工作时:

使用SOLR的仪表板

使用命令行(示例)
$ curl http://localhost:8983/solr/mrm_assay/update -H 'Content-type:application/json' -d '[ { "keep_in_assay" {"set" : "N", "detected_endog": "N", "problems_w_is": "removed b/c requires addition post-Oasis", "onc_std_set": "set1", "fraction_id": "7", "onclistgene": "UBL3", "geneid": "UBL3_IS6", "taxonid": "9606", "peptide": "SSNVPADMINLR", "degen_human": "1", "gene_degeneracy": "1", "percnt_id": "66.7", "uuid": "6d20eb03-d3ee-4eb2-bc16-27cfaabab989" } ]'

我的Angular控制器代码如下所示:
assayControllers.controller('AssayUpdateController', ['$scope', '$http', function($scope, $http){ $scope.processForm = function(){ console.log($scope.assay); $http({ method:'POST', url:'http://localhost:8983/solr/mrm_assay/update', data : $scope.assay, headers : {'Content-Type': 'application/json' } }) .success(function(data, status, headers){ console.log(data.message); }) .error(function(data, status, headers, config){ console.log(status); }); }; } ]);

数据从表单中成功发送,因为我可以在控制台上看到它(虽然JSON对象没有打包在一个数组中,SOLR似乎期望...我还尝试将JSON格式的数据推送到数组并POST但没有运气)

我感谢您的帮助 - 即使只是为了指导我的故障排除!



1> jbdamask..:

关于如何使用AngularJS v1.2.2将单个文档更新为SOLR v4.7的答案是多部分的.这只在我的localhost上测试过!

I.在SOLR
solr-4.7.0/example/solr-webapp/webapp/WEB-INF/web.xml 附带的Jetty服务器上配置CORS

注意: CrossOriginFilter有一个参数chainPreflight,默认情况下设置为true.这需要设置为false.这是CORS转发POST而不是SOLTIONS的OPTIONS的关键..此外,订单很重要!


    cross-origin
    org.eclipse.jetty.servlets.CrossOriginFilter
    
         allowedOrigins
         http://localhost*
    
     
         allowedMethods
         GET,POST,DELETE,PUT,HEAD,OPTIONS
     
     
         allowedHeaders
         origin, content-type, cache-control, accept, options, authorization, x-requested-with
     
    
        supportsCredentials
        true
    
    
      chainPreflight
      false
    



  cross-origin
  /*

II.SOLR期望以数组格式的有效载荷,因此您需要将Angular对象推入一个.基本上,$ scope.data变为[$ scope.data]

assayControllers.controller('AssayUpdateController', ['$scope', '$http', '$location',
    function($scope,  $http, $location){
        $scope.processForm = function(){
            $http.post("http://localhost:8983/solr/mrm_assay/update?commit=true", [$scope.assay])
                .success(function(data, status, headers){
                    console.log(data.message);
                    $location.path("/assays")
                })
                .error(function(data, status, headers, config){
                    console.log(status);
                });
        };
    }
]);

III.SOLR文档包含可能导致POST出现"冲突"错误的版本字段.这是由于我无法追踪的缓存问题(卷曲显示当前值但浏览器有旧版;甚至强制刷新).无论如何,这对SOLR来说比我更有用,所以最好的办法是不要首先将它归还给客户.我不认为字段排除是一个选项,因此我将所有要在solrconfig.xml中返回的字段列入白名单

 
  
     
       explicit
       json
       true
       text
      uuid,keep_in_assay,detected_endog,problems_w_is,onc_std_set,fraction_id,detected_by_orbi_experiments,onclistgene,geneid,taxonid,peptide,\
degen_human,degen_mouse,gene_degeneracy,department,protein_ac,pepid,protid,percnt_id,peptide_ordered

现在该应用程序就像一个魅力!

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有