Django 用Haystack和Solr问题实现搜索

Django 用Haystack和Solr问题实现搜索,django,search,solr,django-haystack,Django,Search,Solr,Django Haystack,我正在尝试对我的django网站进行搜索 在遵循这些原则的过程中,我发现: 如果您使用的是Solr后端,那么还有一个额外的步骤。索尔氏 配置是基于XML的,因此您需要手动重新生成 模式。您应该运行./manage.py build\u solr\u schema首先,删除 将XML输出到Solr的schema.XML文件中,然后重新启动Solr 服务器 首先,我不知道把schema.xml放在哪里,在重新搜索之后,我想我应该在我的项目中创建一个文件夹来放置它:myprojectname/solr

我正在尝试对我的django网站进行搜索

在遵循这些原则的过程中,我发现:

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

首先,我不知道把schema.xml放在哪里,在重新搜索之后,我想我应该在我的项目中创建一个文件夹来放置它:
myprojectname/solr/schema.xml
。是这样吗

第二个,如何重新启动Solr

更新

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

然后我启动solr
java-jar start.jar

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

我得到:

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>
警告:这将不可修复地删除搜索索引中的所有内容。
在此之后,您可以选择从备份恢复或通过“rebuild_index”命令进行重建。
您确定要继续吗?[y/N]y
因为您这样说,所以正在从索引中删除所有文档。
删除所有文件。
索引1新闻。
未能向Solr添加文档:[原因:无]
4004错误:[doc=news.news.2]未知字段'django_id'400
索引1个条目。
未能向Solr添加文档:[原因:无]
40017错误:[doc=zinnia.entry.2]未知字段'django_id'400
我验证了我的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" />

P.S. 我使用的是Django 1.2和Haystack 1.2.7

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

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

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

这将在某个地方安装Solr,比如:
/usr/local/ceral/Solr/…

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

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


注意:如果不使用fabric,可以在命令行上运行这些命令。solr服务器需要schema.xml而不是django的副本。我通常在django项目中保留schema.xml的副本以进行版本控制,但solr在那里找不到它

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

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

这将在某个地方安装Solr,比如:
/usr/local/ceral/Solr/…

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

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


注意:如果不使用fabric,可以在命令行上运行这些命令。我也遇到同样的问题,重建任务失败。对我来说,解决办法是:

  • 构建一个新的schema.xml并将其放在相应的文件夹中

  • 重新启动Solr

  • 毫无问题地重建索引


  • 我也有同样的问题,重建任务失败了。对我来说,解决办法是:

  • 构建一个新的schema.xml并将其放在相应的文件夹中

  • 重新启动Solr

  • 毫无问题地重建索引


  • 是的,ubuntu下的本地开发,已经安装,pip install pysolr,我仍然找不到solr的位置,是否有cmd或其他东西可以告诉我安装路径pysolr不是一个solr服务器,它是一个用于与solr服务器通信的python包装器。我不太喜欢ubuntu,看看这个:或者我安装了它,将shema放在colr/conf中,然后启动它,但是当我重建索引时,我得到:未能将文档添加到Solr:[原因:无]错误404…将完整堆栈跟踪添加到您的问题中?我不能不看到它就调试。虽然404错误表明它找不到您的sorl服务器。您是否在正确的设置变量中为solr服务器设置了正确的地址?例:
    HAYSTACK\u SOLR\u URL='1〕http://127.0.0.1:8983/solr“
    @MadeehaAmeer,好吧,我也遇到了类似的问题。我的问题是v2.x不能创建好的schema.xml。降级到1.2.7,生成solr模式,升级到2.x并使用旧模式,你应该没事。是的,ubuntu下的本地开发,已经安装,pip install pysolr,我仍然找不到solr位置,是否有cmd或其他东西可以让我知道安装路径pysolr不是solr服务器,它是一个python包装器,用于与solr服务器通信。我不太喜欢ubuntu,看看这个:或者我安装了它,将shema放在colr/conf中,然后启动它,但是当我重建索引时,我得到:未能将文档添加到Solr:[原因:无]错误404…将完整堆栈跟踪添加到您的问题中?我不能不看到它就调试。虽然404错误表明它找不到您的sorl服务器。您是否在正确的设置变量中为solr服务器设置了正确的地址?例:
    HAYSTACK\u SOLR\u URL='1〕http://127.0.0.1:8983/solr“
    @MadeehaAmeer,好吧,我也遇到了类似的问题。我的问题是v2.x不能创建好的schema.xml。道氏
    brew install solr
    
    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')