Cap*_*ack 5 xml json solr node.js express
我正在尝试将Solr集成到Node/Express应用程序中,而我正在使用此 Node包进行Solr集成.我能够正确查询索引,但按照包的GitHub上的说明,我无法将文档添加到索引.我一直收到这个错误:
[SyntaxError: Unexpected token <]
Run Code Online (Sandbox Code Playgroud)
在Solr控制台上,错误更加详细:
SEVERE: Error processing "legacy" update command:com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '[' (code 91) in prolog; expected '<'
Run Code Online (Sandbox Code Playgroud)
这是一个小测试应用程序,我正在尝试使这个工作:
// 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');
Run Code Online (Sandbox Code Playgroud)
不起作用的特定部分是我尝试在此处向索引添加文档的位置:
// Add documents
client.add(docs,function(err,obj){
if(err){
console.log(err);
}else{
console.log(obj);
}
});
Run Code Online (Sandbox Code Playgroud)
我的预感是,这与接收JSON有关,当它期待XML时,但我不能在我的生活中弄清楚如何发送XML或使Solr接受JSON.有什么建议?
我看过一点 solr-node-client 的代码,我发现为了添加文档,他们使用了这个函数 Client.prototype.add 并且这个函数最终使用了这个处理程序
this.UPDATE_JSON_HANDLER =
(versionUtils.version(this.options.solrVersion) >= versionUtils.Solr4_0)
? 'update' : 'update/json';
Run Code Online (Sandbox Code Playgroud)
这意味着,如果您使用大于或等于 4 的 Solr 版本,则在 Solrconfig.xml 文件中存在一个名为 update 的请求处理程序。
<requestHandler name="/update" class="solr.UpdateRequestHandler">
</requestHandler>
Run Code Online (Sandbox Code Playgroud)
单个统一的更新请求处理程序支持 XML、CSV、JSON 和 javabin 更新请求,并根据 ContentStream 的 Content-Type 委托给适当的 ContentStreamLoader。
Node包中的代码发送json,因此Solr将委托给适当的ContentStreamLoader。这是Node包中的代码
'内容类型':'应用程序/json;字符集=utf-8',
如果您使用低于版本 4 的 Solr,那么在 solrconfig.xml 中您应该有一个像这样的请求处理程序
<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
<lst name="defaults">
<str name="stream.contentType">application/json</str>
</lst>
</requestHandler>
Run Code Online (Sandbox Code Playgroud)
因此,长话短说,请确保如果您使用 Solr >=4,那么在 solrconfig.xml 中您必须有一个更新请求处理程序
<requestHandler name="/update" class="solr.UpdateRequestHandler">
</requestHandler>
Run Code Online (Sandbox Code Playgroud)
如果您使用 Solr < 4,请确保您有一个像这样的更新处理程序
<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
<lst name="defaults">
<str name="stream.contentType">application/json</str>
</lst>
</requestHandler>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |