“”当我尝试用我的Node / Express应用程序将文档添加到我的Solr索引
我正在尝试将Solr集成到Node / Express应用程序中,同时我正在使用此节点包进行Solr集成。 我能够正确查询索引,但按照包的GitHub上的说明,我无法将文档添加到索引。 我不断收到这个错误:
[SyntaxError: Unexpected token <]
在Solr控制台上,错误更为详细:
SEVERE: Error processing "legacy" update command:com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '[' (code 91) in prolog; expected '<'
这里是我正在使用的一个小testing应用程序来试试这个工作:
// set variables for environment var express = require('express'); var path = require('path'); var solr = require('solr-client'); // Create the Express app var app = express(); module.exports = app; // Initialize the Vash view engine app.set("views", path.join( __dirname, "/views") ); app.set("view engine", "vash"); // set routes app.get('/', function(req, res) { // Create a client var client = solr.createClient(); var query = 'q=fencing'; client.get('select', query, function(err, obj) { if (err) { console.log(err); } else { console.log(obj); } }); // Switch on "auto commit", by default `client.autoCommit = false` client.autoCommit = true; var docs = []; for(var i = 0; i <= 10 ; i++){ var doc = { id : 12345 + i, title_t : "Title "+ i, description_t : "Text"+ i + "Alice" }; docs.push(doc); } // Add documents client.add(docs,function(err,obj){ if(err){ console.log(err); }else{ console.log(obj); } }); res.render('index'); }); // Set server port app.listen(4000); console.log('server is running on localhost:4000');
不工作的特定部分是我尝试在这里添加一个文档到索引的地方:
// Add documents client.add(docs,function(err,obj){ if(err){ console.log(err); }else{ console.log(obj); } });
我的直觉是,这与接收JSON时需要处理XML有关,但是我不能一辈子知道如何发送XML或者让Solr接受JSON。 有什么build议?
我已经看到了solr-node-client的一些代码,我发现为了添加一个文档,他们使用了这个函数Client.prototype.add,这个函数最终使用这个handler
this.UPDATE_JSON_HANDLER = (versionUtils.version(this.options.solrVersion) >= versionUtils.Solr4_0) ? 'update' : 'update/json';
这意味着如果你使用大于或等于4的Solr版本,那么在Solrconfig.xml文件中就存在一个名为update的请求处理程序。
<requestHandler name="/update" class="solr.UpdateRequestHandler"> </requestHandler>
一个统一的更新请求处理程序支持XML,CSV,JSON和javabin更新请求,根据ContentStream的Content-Type委托给相应的ContentStreamLoader。
Node包中的代码发送json,因此Solr将委托给相应的ContentStreamLoader。 这是Node包中的代码
'content-type':'application / json; 字符集= UTF-8' ,
如果你使用的Solr小于版本4,那么在你的solrconfig.xml中你应该有这样的请求处理程序
<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler"> <lst name="defaults"> <str name="stream.contentType">application/json</str> </lst> </requestHandler>
所以,简单来说,确保如果你使用Solr> = 4,那么在solrconfig.xml中你必须有一个更新请求处理程序
<requestHandler name="/update" class="solr.UpdateRequestHandler"> </requestHandler>
如果你使用Solr <4,那么确保你有一个像这样的更新处理程序
<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler"> <lst name="defaults"> <str name="stream.contentType">application/json</str> </lst> </requestHandler>
希望这可以帮助
可能是由于没有CFX库。 请参阅: http : //cxf.apache.org/