django-haystack+solr实现搜索

前天晚上写了个django-haystack和whoosh结合来实现搜索功能的,今天把solr看了下,下面是实现过程。

1.首先下载solr。http://mirror.bjtu.edu.cn/apache/lucene/solr/3.6.1/apache-solr-3.6.1.zip 下载解压即可,这里要注意下,我用的是solr3.6版本的,所以以下内容都是针对3.6的,至于为什么没用4.0,其实是我还没找到4.0和django-haystack结合起来的方法哈

cd example/

java -jar start.jar

即可启动solr了,可以进入http://localhost:8983/solr/admin/看看效果。

ps. 这里有个地方要注意的,将solr/conf/stopwords.txt改名为stopwords_en.txt,不然会出错的

2.安装pysolr。 sudo pip install pysolr

haystack就不介绍了,看上篇就知道了。

3.修改settings.py

<!-- lang: python -->
HAYSTACK_CONNECTIONS = {
'default': {
    'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
    'URL': 'http://127.0.0.1:8983/solr'
},

}

4.新建models如下:

<!-- lang: python -->
class Blog(models.Model):
    title = models.CharField(max_length=30)
    content = models.CharField(max_length=140)
    created_time = models.DateTimeField(auto_now=True)
    
    def __unicode__(self):
        return self.title

5.在blog目录下新建search_indexes.py:

<!-- lang: python -->
import datetime
from haystack import indexes
from blog.models import Blog

class BlogIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    title = indexes.CharField(model_attr='title')
    content = indexes.CharField(model_attr='content')
    
    def get_model(self):
        return Blog
        
    def index_queryset(self):
        return self.get_model().objects.all()

6.新建templates/search/indexes/blog/blog_text.txt:

<!-- lang: html -->
{{ object.title }}
{{ object.content }}

7.在urls.py中加入(r’^$’, include(‘haystack.urls’)),

8.新建templates/search/search.html:

<!-- lang: html -->

<h2>Search</h2>

<form method="get" action=".">
    <table>
        {{ form.as_table }}
        <tr>
            <td>&nbsp;</td>
            <td>
                <input type="submit" value="Search">
            </td>
        </tr>
    </table>

    {% if query %}
        <h3>Results</h3>

        {% for result in page.object_list %}
            <p>
                Title: {{ result.object.title }}
            </p>
			<p>
				Content: {{ result.object.content }}
			</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 }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %}
                |
                {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %}
            </div>
        {% endif %}
    {% else %}
        {# Show some example queries to run, maybe query syntax, something else? #}
    {% endif %}
</form>

9.将schema.xml导入: python manage.py build_solr_schema > /path_to_solr/example/solr/conf/

10.重建索引: python manage.py rebuild_index

大致流程就这样的。

转载于:https://my.oschina.net/zhuf/blog/95491

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值