1.环境配置
这一点很重要!请一定看仔细了!就是由于版本的不匹配,导致本博花了一天的时间在debug上,虽然solr 5.0.0的版本界面好看,然而不兼容haystack,这一点在踩过坑的人debug时得到了验证,haystack源码中solr_backend中有这么一段注释:
之后本博尝试去修改框架中的代码,力图让其能够和solr 5 兼容,但实在能力有限,无法读懂haystack里面得弯弯绕绕,不得不暂时向作者势力低头,乖乖回退了版本。
环境版本及下载地址:
solr:3.6.1
http://archive.apache.org/dist/lucene/solr/3.6.1/
haystack:2.6.0
https://github.com/django-haystack/django-haystack/tree/v2.6.0
Django:1.8 (可直接使用pip,指定版本)
pysolr:3.6.0 (可直接使用pip,指定版本)
操作系统:Window7 64位
IDE:Pycharm
数据库:Mysql
2.配置流程
①启动solr
使用cmd命令,目录到example里 java -jar start.jar,然后进入solr界面http://localhost:8983/solr/admin/ 如下:
②在pycharm中新建一个Django project,然后在其setting中增加以下配置
目录如下,其中book是我的app name
#添加Haystack 到 INSTALLED_APPS
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'haystack',
'your app name'
)
#配置solr引擎
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://127.0.0.1:8983/solr/'
},
}
#数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your db name',
'USER':'your user name',
'PASSWORD':'your passwor',
'HOST':'',
'PORT':'',
}
}
③新建models
在本文中数据库比较简单,只包含3个字段,如下:
class Book(models.Model):
name = models.CharField(max_length=140) #这里一定要指定长度
author = models.CharField(max_length=140)
在Django里建立了model之后就可以自动生成表勒,命令如下:
# 进入 manage.py 所在的那个文件夹下输入这个命令
python manage.py syncdb
#注意:Django 1.7 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
④在book目录下新建search_indexes.py
class BookIndex(indexes.SearchIndex, indexes.Indexable): #类名必须为需要检索的Model_name+Index,这里需要检索book,所以创建bookIndex
text = indexes.CharField(document=True, use_template=True)
name = indexes.CharField(model_attr='name')
author = indexes.CharField(model_attr='author')
def get_model(self): #重载get_model方法
return Book
def index_queryset(self,using=None): #using不能漏写了
return self.get_model().objects.all()
⑤新建templates/search/indexes/book/book_text.txt:
<!-- lang: html -->
</h2>{
{ object.name }}</h2>
<p>{
{ object.author }}</p>
⑥在urls.py中加入
url(r'^admin/', include(admin.site.urls)),
url(r'^search/', include('haystack.urls')),
url(r'^$', include('haystack.urls')),
⑦新建templates/search/search.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>Search</h2>
<form method="get" action=".">
<table>
{
{ form.as_table }}
<tr>
<td> </td>
<td>
<input type="submit" value="Search">
</td>
</tr>
</table>
{% if query %}
<h3>Results</h3>
{% for result in page.object_list %}
<p>
Name: {
{ result.object.name }}
</p>
<p>
Author: {
{ result.object.author }}
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% if page.has_previous or page.has_next %}
<div>
{% if page.has_previous %}<a href="?q={
{ query }}&page={
{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={
{ query }}&page={
{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
</body>
</html>
⑧生成schema,然后将其覆盖your path/solr-3.6.1/example/solr/conf/schema.xml
python manage.py build_solr_schema
⑨重建索引文件
python manage.py rebuild_index
3.结果展示
历经千辛万苦啊!撒花!其中踩坑无数,终于弄好了!转载请注明出处!下一篇打算加入中文分词以及界面美化。
参考资料:
http://www.ziqiangxuetang.com/django/django-models.html
http://www.2cto.com/kf/201610/557680.html
https://my.oschina.net/zhuf/blog/95491