gpt4 book ai didi

json - "[SyntaxError: Unexpected token <]"当我尝试使用我的 Node/Express 应用程序将文档添加到我的 Solr 索引时

转载 作者:数据小太阳 更新时间:2023-10-29 01:57:54 26 4
gpt4 key购买 nike

我正在尝试将 Solr 集成到 Node/Express 应用程序中,同时我正在使用 this Solr 集成的 Node 包。我能够正确查询索引,但按照包的 GitHub 上的说明,我无法将文档添加到索引中。我不断收到此错误:

[SyntaxError: Unexpected token <]

在 Solr 控制台上,错误更详细一些:

SEVERE: Error processing "legacy" update command:com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '[' (code 91) in prolog; expected '<'

这是我用来尝试让它正常工作的小型测试应用程序:

// 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);
}
});

我的直觉是,这与在需要 XML 时接收 JSON 有关,但我终究无法弄清楚如何发送 XML 或使 Solr 能够接受 JSON。有什么建议吗?

最佳答案

我看过一些 solr-node-client 的代码,我看到为了添加文档,他们使用了这个函数 Client.prototype.add 并且这个函数最终使用了这个处理程序

this.UPDATE_JSON_HANDLER = 
(versionUtils.version(this.options.solrVersion) >= versionUtils.Solr4_0)
? 'update' : 'update/json';

这意味着如果您使用大于或等于 4 的 Solr 版本,则在 Solrconfig.xml 文件中存在一个名为更新的请求处理程序。

  <requestHandler name="/update" class="solr.UpdateRequestHandler">

</requestHandler>

A single unified update request handler supports XML, CSV, JSON, and javabin update requests, delegating to the appropriate ContentStreamLoader based on the Content-Type of the ContentStream.

看这里 https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-JSONFormattedIndexUpdates

Node 包中的代码发送 json,因此 Solr 将委托(delegate)给适当的 ContentStreamLoader。这是Node包中的代码

'content-type' : 'application/json; charset=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>

所以,长话短说,确保如果你使用 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>

希望对你有帮助

关于json - "[SyntaxError: Unexpected token <]"当我尝试使用我的 Node/Express 应用程序将文档添加到我的 Solr 索引时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com