前天晚上寫了個django-haystack和whoosh結合來實現搜索功能的,今天把solr看了下,下面是實現過程。html
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結合起來的方法哈java
cd example/python
java -jar start.jarapache
便可啓動solr了,能夠進入http://localhost:8983/solr/admin/看看效果。django
ps. 這裏有個地方要注意的,將solr/conf/stopwords.txt更名爲stopwords_en.txt,否則會出錯的ui
2.安裝pysolr。 sudo pip install pysolrurl
haystack就不介紹了,看上篇就知道了。code
3.修改settings.pyorm
<!-- lang: python --> HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 'URL': 'http://127.0.0.1:8983/solr' },
}xml
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> </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 }}&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>
9.將schema.xml導入: python manage.py build_solr_schema > /path_to_solr/example/solr/conf/
10.重建索引: python manage.py rebuild_index
大體流程就這樣的。