【问题标题】:"[SyntaxError: Unexpected token <]" when I try to add documents to my Solr index with my Node/Express app“[SyntaxError: Unexpected token <]”当我尝试使用我的 Node/Express 应用程序将文档添加到我的 Solr 索引时
【发布时间】:2016-11-03 06:53:34
【问题描述】:

我正在尝试将 Solr 集成到 Node/Express 应用程序中,而我正在使用 this Node 包进行 Solr 集成。我能够正确查询索引,但是按照包的 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);
    }
});

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

【问题讨论】:

  • 你使用什么版本的 Solr?

标签: json xml node.js express solr


【解决方案1】:

我看过一点 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 文件中存在一个名为 update 的请求处理程序。

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

  </requestHandler>

一个统一的更新请求处理程序支持 XML、CSV、JSON 和 javabin 更新请求,委托给适当的 ContentStreamLoader 基于 ContentStream 的 Content-Type。

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

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

'内容类型' : '应用程序/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

<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
            <lst name="defaults">
             <str name="stream.contentType">application/json</str>
           </lst>
      </requestHandler> 

希望对你有帮助

【讨论】:

  • 我使用的 solr 版本小于 4。我尝试了那个请求处理程序,但出现错误。 “org.apache.solr.common.SolrException:加载类'solr.JsonUpdateRequestHandler'时出错”
  • 您好,您必须导入相应的 jar。即在我的 solrconfig 文件中,我有类似的东西, 看看这个答案,如果还有问题告诉我stackoverflow.com/questions/14827375/…
  • 实际上,看起来至少部分问题是我没有将核心传递给 var client = solr.createClient();作为参数。我现在已经让它工作了,至少在测试环境中的更现代版本的 Solr 上。谢谢您的帮助。在实际应用程序上配置时,我可能仍然需要您的解决方案。
【解决方案2】:

可能是由于缺少 CFX 库。 参考:http://cxf.apache.org/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2016-03-19
    • 2021-08-13
    • 2020-06-03
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多