1

我正在尝试对基于 django 的网站实施搜索。

在遵循教程时,我发现了这一点:

如果您使用的是 Solr 后端,那么您还有一个额外的步骤。Solr 的配置是基于 XML 的,因此您需要手动重新生成模式。您应该run ./manage.py build_solr_schema首先将 XML 输出放到 Solr 的 schema.xml 文件中,然后重新启动 Solr 服务器。

首先,我不知道将我的 schema.xml 放在哪里,经过一番研究后,我想我会在我的项目中创建一个文件夹来放置它:myprojectname/solr/schema.xml. 是对的吗?

、如何重启Solr?

更新

我下载了 Solr,将其解压缩并将生成的 schema.xml 放入其中example/solr/conf

然后我开始 solrjava -jar start.jar

但是当我尝试建立索引时: ./manage.py rebuild_index

我得到:

WARNING: This will irreparably remove EVERYTHING from your search index.
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
Are you sure you wish to continue? [y/N] y

Removing all documents from your index because you said so.
All documents removed.
Indexing 1 News.
Failed to add documents to Solr: [Reason: None]
<response><lst name="responseHeader"><int name="status">400</int><int    name="QTime">4</int></lst><lst name="error"><str name="msg">ERROR: [doc=news.news.2]   unknown field 'django_id'</str><int name="code">400</int></lst></response>
Indexing 1 entries.

Failed to add documents to Solr: [Reason: None]
<response><lst name="responseHeader"><int name="status">400</int><int name="QTime">17</int></lst><lst name="error"><str name="msg">ERROR: [doc=zinnia.entry.2] unknown field 'django_id'</str><int name="code">400</int></lst></response>

我验证了我的 schema.xml,我确实有:

<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false" />
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false" />

PS 我正在使用 Django 1.2 和 Haystack 1.2.7

4

2 回答 2

1

solr 服务器需要有您的 schema.xml 的副本,而不是 django。我通常在我的 django 项目中保留一份 schema.xml 的副本以进行版本控制,但是 solr 在那里找不到它。

你是本地的solr服务器吗?您使用的是托管还是远程 Solr 服务?我在本地开发然后使用 websolr b/ci 不想为生产配置 solr。

对于 OSX 上的本地开发人员

我假设这是 OSX 上的本地开发,并且您安装了自制软件(假设 - 如果不是这种情况,请给我更多信息):

brew install solr

这将在某个地方安装 Solr,例如:/usr/local/Cellar/solr/...

注意:当我在本地开发时,我喜欢使用结构来运行部署和一些启动任务。

所以在我的 fabfile.py 我有一个结构命令将我的 schema.xml 复制到正确的文件中并启动 solr 服务器(我只是fab solr在 cmd 行运行)

def solr() :
    # build a new updated schema.xml (changes to indexes/models may require this so always do it for local testing)
    local('python manage.py build_solr_schema > schema.xml')
    # copy the schema.xml into the proper directory
    local('cp schema.xml /usr/local/Cellar/solr/3.6.0/libexec/example/solr/conf/schema.xml')
    # start the solr server
    local('cd /usr/local/Cellar/solr/3.6.0/libexec/example && java -jar start.jar')

注意:如果你不使用fabric,你可以在命令行上运行这些命令

于 2012-11-05T16:49:08.410 回答
0

我有同样的问题,重建任务失败。对我来说,解决方案是:

  1. 新建一个schema.xml,放到对应的文件夹中

  2. 重启 Solr

  3. 重建索引没有问题

于 2014-01-16T08:59:11.627 回答