实现Django的全文检索功能(三):进一步学习Haystack
来源:互联网 发布:w7怎么删除软件 编辑:程序博客网 时间:2024/05/16 17:04
毫无疑问Django-haystack应该是Django集成全文检索引擎的最佳选择了,haystack提供了一套非常优雅灵活易用的API, 就像Django本身的ORM/QuerySet一样,使您的索引、搜索工作大大简化。
Django-haystack的文档在这里,是2.0beta的,大家可以去啃一下。
http://django-haystack.readthedocs.org/en/latest/toc.html
粗粗看了一下Django-haystack,大体有这样一些特性:
1、提供SearchQuerySet对象
这是一个类似Django本身的QuerySet的东东,使用上也是非常类似的,像这样:
from haystack.query import SearchQuerySetall_results = SearchQuerySet().all()hello_results = SearchQuerySet().filter(content='hello')hello_world_results = SearchQuerySet().filter(content='hello world')unfriendly_results = SearchQuerySet().exclude(content='hello').filter(content='world')recent_results = SearchQuerySet().order_by('-pub_date')[:5]
SearchQueryset也可以像QuerySet一样进行链式调用:
看到SQ对象,是不是有些眼熟,就像Django Q对象。
基本上,Haystack努力降低您的学习成本,提供一个类似DJango的抽象接口层,并且支持多种检索引擎后端,所以,推荐大家使用.
当您更新了Model后,你需要更新索引,一般情况下,可以选择update_index命令:
manage.py update_index
update_index提供了多个参数来控制您的索引更新策略,像:
不过,这些更新索引并不是自动执行的,你需要写自己的计划日程来更新索引。
这样的设计应该是合理的,因此执行索引操作可能是耗时的,哪些数据需要更新索引应该由您来选择。
如果只是这样,那还算不上超简单,最好是能自动进行更新索引。
haystack为我们提供了一个自动更新的机制。
在上一篇文中,我们提到,要对一个Model进行更新,需要创建一个search_indexes.py
里面定义一个index类,像这样:
class BlogIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True)
如果您要实现在Model删除、更新、增加时能自动更新索引,那非常简单,只要将index.SearchIndex更换为index.RealTimeSearchIndex即可。像这样:
class BlogIndex(indexes.RealTimeSearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True)
RealTimeSearchIndex实际上是在Django里面数据的post_save/post_delete信号里面注册了自动更新的方法,这样当你Model删除、更新、增加时就能自动更新索引。是不是超简单。
需要注意的是,更新索引可能是耗时的,您需要评估自己应用是否适合应用这种自动索引机制。至少我认为像涉及大量用户的Web2.0应用可能是不合适的。
但是如果是像政府网站、CMS之类的,我认为是非常合适的,毕竟发布新闻信息等量不会多。
至此,我们就实现了索引的自动更新功能,整个网站的全文检索的功能已全部具备,剩下的就是进一步美化了。
3、ModelSearchIndex进一步简化Model索引创建
haystack提供了ModelSearchIndex类,用来进一步简化Index类的创建,像这样:
呵呵,haystack将你写索引字段的权力都给剥夺了,甚至你只要指定一下Model就行,是不是有点像ModelAdmin.
没错,haystack就是要最大限度减少您的工作量。
稍后待续........
- 实现Django的全文检索功能(三):进一步学习Haystack
- 实现Django的全文检索功能(三):进一步学习Haystack
- 实现Django的全文检索:Haystack
- Django的全文检索功能(一):haystack全文检索的框架
- 使用haystack实现django全文检索搜索引擎功能
- django+haystack+solr 实现网站全文检索
- Django-haystack框架结合中文jieba分词和英文whoosh引擎实现全文检索功能
- 实现Django的全文检索功能(二):集成haytack
- 实现Django的全文检索功能(二):集成haytack
- 实现Django的全文检索功能(二):集成haytack
- 实现Django的全文检索功能(一):选择Whoosh全文检索引擎
- 实现Django的全文检索功能(一):选择Whoosh全文检索引擎
- django-haystack全文检索详细教程
- Django的全文检索功能(二):whoosh搜索引擎
- django全文搜索学习心得(一)haystack 篇
- Oracle的全文检索功能
- 使用compass+lucene实现简单的全文检索功能
- Oracle全文检索功能实现的尝试试验
- Rose 画序列图
- axis2实现webservice之使用services.xml文件发布WebService
- 一米阳光
- Hadoop实战实例
- [探讨] 代码审查:究竟是好主意还是坏主意?
- 实现Django的全文检索功能(三):进一步学习Haystack
- 如果爱,请深爱:10大iOS开发者最喜爱的类库
- jquery mobile 为移动开发注入新活力
- MSSQL CTE 使用技巧和总结
- STL系列之八 slist单链表
- Struts中ActionContext和ServletActionContext的比较
- HASHMAP里面数据封装成XML
- Oracle Database Backup and Recovery Reference【每日一译】--2012-11-12
- Android的AsyncTask