无法向Solr添加文档:Solr响应错误(HTTP 400)(django + haystack + solr)

时间:2016-03-16 10:48:12

标签: python django solr django-haystack pysolr

我目前正在生产Solr 4.2.0(2012年左右开始)。我已经建立了一个新的开发环境,我升级了所有软件包(Django 1.8.10,PySolr 3.4.0,Haystack 2.4.1)并设置了Solr 5.5.0

简而言之

我有Solr正在运行,我的核心/集合是用'basic_configs'创建的,它似乎运行良好,除了在索引编制过程中我遇到了很多类似的错误:

All documents removed.
Indexing 9604 contracts
Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
oc=accounting.contract.22] unknown field 'status']
Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
oc=accounting.contract.70556] unknown field 'date_signed']
Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
oc=accounting.contract.72059] unknown field 'date_signed']
Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
oc=accounting.contract.73458] unknown field 'date_signed']

查看id,似乎大多数文档都很好,但频繁(列表继续)这些错误出现在所有表/索引中。

最终我跟着this promising github project guide,但遗憾的是它并没有为我解决问题。

我做了什么,一步一步

  1. 成功安装Solr 5.5.0(网页界面工作于 localhost:8983),使用this guide
  2. 使用以下命令创建了一个名为'spng'的集合: sudo su - solr -c'/ opt / solr / bin / solr create -c spng -d basic_configs'
  3. 使用the earlier mentioned github project guide
  4. 中的solr.xml覆盖了我的solr.xml(/srv/spng/src/django-haystack/haystack/templates/search_configuration/solr.xml)
  5. 只是为了确保我给了solr.xml文件777权限。
  6. 我的settings.py包含以下条目:

    HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
            'URL': 'http://localhost:8983/solr/spng',
            'DEFAULT_OPERATOR': 'AND',
            'INCLUDE_SPELLING': True,
        },
    }
    
    1. 我创建了一个schema.xml(python manage.py build_solr_schema)并将其放在/var/solr/data/spng/conf/schema.xml
    2. 再次,为了确保我给了schema.xml文件777权利。
    3. 我使用curl命令重新加载核心:curl'http://localhost:8983/solr/admin/cores?action=RELOAD&core=spng&wt=json&indent=true'
    4. 回应是:

      {
        "responseHeader":{
          "status":0,
          "QTime":300}}
      
      1. 我还重启了uwsgi和solr,以确保
      2. 此时我尝试运行python manage.py rebuild_index命令
      3. 如上所述,我最终遇到以下错误:

        All documents removed.
        Indexing 9604 contracts
        Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
        oc=accounting.contract.22] unknown field 'status']
        Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
        oc=accounting.contract.70556] unknown field 'date_signed']
        Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
        oc=accounting.contract.72059] unknown field 'date_signed']
        Failed to add documents to Solr: Solr responded with an error (HTTP 400): [Reason: ERROR: [d
        oc=accounting.contract.73458] unknown field 'date_signed']
        

        有谁知道可能出错了什么?索引在我的生产服务器上正常运行,运行4.2.0。我错过了一个设置还是Solr 5.5.0造成了这些错误?

3 个答案:

答案 0 :(得分:4)

特别感谢 elyograg 帮助我解决了Solr的IRC频道(freenode上的#solr)。

  

elyograg:如果您正在使用来自basic_configs的stock solrconfig.xml,那么您的架构位于名为" managed-schema"的文件中。 - 默认情况下,所有示例配置都使用托管架构,自5.5起。

     

elyograg:将它(schema.xml内容)放入托管架构中。您可以更改solrconfig.xml,但如果保留默认值,那么试图帮助您的人的生活会更轻松。

换句话说,代替schema.xml,从版本5.5开始,模式文件被称为“托管模式”。使用basic_configs创建集合时(在我的案例中位于/ var / solr / data // conf / managed-schema中)

更新文件并重新加载核心后,索引完成且没有错误。

在未来的版本中要小心,因为 elyograg 也注意到了:

  

elyograg:添加.xml扩展名也许是一个好主意。我不认为缺少扩展会对手工编辑起到很大的威慑作用。

因此将来它可能被称为managed-schema.xml

答案 1 :(得分:3)

Solr Index Update包含4个步骤:

  1. 在search_index.py

  2. 中添加有效字段
  3. 通过运行生成架构:

    python manage.py build_solr_schema> schema.xml中

  4. 通过以下方式更新您的django:

    python manage.py update_index

  5. 重启服务器。

  6. 如果上述所有步骤均已完成且没有任何错误,则表示您的字段已成功更新

答案 2 :(得分:2)

检查

中的模式文件
if(User.Identity.IsSignedInWithFacebook())
{
    // do what you want
}

并与build_solr_schema中的模式进行比较,以确保solr使用正确的模式