5

我目前正在生产中使用 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,似乎大多数文档都很好,但足够频繁(列表继续)这些错误出现在所有表/索引中。

最终我遵循了这个有前途的 github 项目指南,但不幸的是它并没有为我解决问题。

我做了什么,一步一步

  1. 使用本指南成功安装 Solr 5.5.0(在
    localhost:8983 工作的 Web 界面)
  2. 使用以下命令创建了一个名为“spng”的集合:sudo su - solr -c '/opt/solr/bin/solr create -c spng -d basic_configs'
  3. 用前面提到的 github 项目指南中的 solr.xml 覆盖我的 solr.xml (/srv/spng/src/django-haystack/haystack/templates/search_configuration/solr.xml)
  4. 只是为了确保我给了 solr.xml 文件 777 权限。

我的 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 '

回应是:

{
  "responseHeader":{
    "status":0,
    "QTime":300}}
  1. 我还重新启动了 uwsgi 和 solr 以确保
  2. 此时我尝试运行 python manage.py rebuild_index 命令

如前所述,我最终遇到以下错误:

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 导致了这些错误?

4

3 回答 3

4

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

elyograg:如果您使用的是来自 basic_configs 的库存 solrconfig.xml,那么您的架构位于名为“managed-schema”的文件中——从 5.5 开始,所有示例配置都默认使用托管架构。

elyograg:将其(schema.xml 内容)放入托管模式。您可能会更改 solrconfig.xml,但如果您保留默认设置,那么帮助您的人的生活会更轻松。

换句话说,从 5.5 版开始,使用 basic_configs 创建集合时,模式文件被称为“托管模式”,而不是 schema.xml(在我的情况下,位于 /var/solr/data//conf/managed-schema)

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

在未来的版本中要小心,因为elyograg还指出:

elyograg:添加 .xml 扩展名也可能是个好主意。我认为缺少扩展不会对手动编辑产生很大的威慑作用。

所以将来它可能会被称为 managed-schema.xml

于 2016-03-16T19:15:23.620 回答
3

Solr 索引更新包括 4 个步骤:

  1. 在 search_index.py 中添加有效字段

  2. 通过运行生成模式:

    python manage.py build_solr_schema > schema.xml

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

    python manage.py update_index

  4. 重启服务器。

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

于 2017-01-30T12:12:15.140 回答
2

检查架构文件

http://localhost:8983/solr/#/spng/files?file=schema.xml

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

于 2016-03-16T16:53:33.977 回答