django全文搜索学习心得(四)sphinx篇
来源:互联网 发布:数据驱动安全2.0 编辑:程序博客网 时间:2024/05/17 05:13
转自:http://www.cnblogs.com/chang/archive/2013/01/10/2855355.html
很遗憾,haystack+ sphinx 没有文档可以查看,菜鸟们都安息了。还好有django-sphinx 。这玩意挺好!!!!
安装:
django-sphinx , 这个现在已经是非常稳定的了,所以github上边也不会再有任何新的发行版了,稳定才是最好的保障。所以直接pip install django-sphinx 安装吧
sphinx ,下载,我暂时使用的是稳定版的,0.9.9的,http://sphinxsearch.com/downloads/archive/ ,你根据自己需要下载啊,整完直接解压到d盘吧
d:\sphinx
然后直接创建一个data文件夹 即d:\sphinx\data\ (在配置中使用的存储索引的地方)
使用,这个超简单的,下面是官方的用法说明
from djangosphinx.models import SphinxSearchclass MyModel(models.Model): search = SphinxSearch() # 默认索引名是你的表名即model名 search = SphinxSearch('index_name') # 自己设定索引名 searchdelta = SphinxSearch( index='index_name delta_name', weights={ #设定相关权重 'name': 100, 'description': 10, 'tags': 80, }, mode='SPH_MATCH_ALL', rankmode='SPH_RANK_NONE', )#以上是在model中使用#下面是在views.py中使用查询方法queryset = MyModel.search.query('query')results1 = queryset.order_by('@weight', '@id', 'my_attribute')results2 = queryset.filter(my_attribute=5)results3 = queryset.filter(my_other_attribute=[5, 3,4])results4 = queryset.exclude(my_attribute=5)[0:10]results5 = queryset.count()
下面介绍我在练习中使用的例子
from django.db import modelsfrom djangosphinx.models import SphinxSearchclass Chang(models.Model): title=models.CharField(max_length=200) body=models.TextField() tags=models.CharField(max_length=200) search=SphinxSearch(index='sphinxtest_chang')
然后再view中使用
from model import Chang
from django.shortcuts import render_to_response
def search(request): if request.method == 'POST': query=request.POST.get('query',None) r=Chang.search.query(query) chang=list(r) context={'chang':chang,'query':query,'search_meta':r._sphinx} else: chang=list() context={'chang':chang} return render_to_response('search/search.html',context)
再看我的templates\sphinxtest\search.html
<!DOCTYPE html><html><head> <title></title></head><body><div> <form action="/search/" method="POST"> <input type="text" name="query"/> <input type="submit"> </form> {% if chang%} <p>Your search for “<strong>{{ query }}</strong>” had <strong>{{ search_meta.total_found }}</strong> results.</p> <p>search_meta object dump: {{ search_meta }}</p> {% endif %} <hr/> {% for s in chang%} <h3>{{ s.title }}</h3> <h4>{{s.body}}</h4> <p>(weight: {{ s.sphinx.weight }})</p> <p>story.sphinx object dump: {{ s.sphinx }}</p> {% endfor %}</div></body></html>
最后看看我的settings.py
INSTALLED_APPS = (
...'djangosphinx', 'sphinxtest',
...)#Sphinx 0.9.9SPHINX_API_VERSION = 0x116
和urls.py配置
urlpatterns = patterns('',
(r'^search/$','sphinxtest.views.search'),)
准备工作做完之后,我们开始创建索引吧
python manage.py generate_sphinx_config sphinxtest >> d:\sphinx\bin\sphinx.conf
#这个本身sphinx.conf应该在d:\sphinx\下,我这样地址会创建一个新的,使用时也用他,不过这个是不完全的,建议直接参考d:\sphinx\下的sphinx-min.conf
直接上我的配置吧
source sphinxtest_chang{ type = pgsql sql_host = 127.0.0.1 sql_user = postgres sql_pass = 1234 sql_db = chang sql_port = 5432 sql_query_pre = #SET NAMES utf8 sql_query_post = sql_query = \ SELECT id, title, body, tags\ FROM sphinx_story sql_query_info = SELECT * FROM `sphinx_story` WHERE `id` = $id}index sphinxtest_chang{ source = sphinxtest_chang path = d:/sphinx/data/sphinxtest_chang docinfo = extern morphology = none stopwords = min_word_len = 1 charset_type = utf-8 charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F #索引时用于转换大小写的字符表 min_prefix_len = 0 min_infix_len = 0 ngram_len = 1 # 简单分词,只支持0和1,如果要搜索中文,请指定为1 ngram_chars = U+3000..U+2FA1F # 需要分词的字符,如果要搜索中文,需设置此项}indexer{ mem_limit = 32M}searchd{ port = 3312 log = @CONFDIR@/log/searchd.log query_log = @CONFDIR@/log/query.log read_timeout = 5 max_children = 30 pid_file = @CONFDIR@/log/searchd.pid max_matches = 1000 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1}
sphinx 创建索引
cd 到 d:\sphinx\bin\
indexer --config sphinx.conf sphinxtest_chang
开启sphinx服务
cd 到 d:\sphinx\bin\
searchd --config sphinx.conf
最后运行程序,查看结果吧,记得网数据库中添加点数据哦,否则你创建出的索引是搜不到结果的。
- django全文搜索学习心得(四)sphinx篇
- django全文搜索学习心得
- django全文搜索学习心得(一)haystack 篇
- django全文搜索学习心得(二)solr 篇
- django全文搜索学习心得(三)whoosh 篇
- django全文搜索学习心得(五) whoosh 精简版
- sphinx全文搜索
- MySQL+Sphinx实现全文搜索
- MySQL+Sphinx实现全文搜索
- Django添加全文搜索功能入门篇
- Django添加全文搜索功能入门篇
- Django添加全文搜索功能入门篇
- sphinx结合mongodb、xml做全文搜索
- php高效搜索之sphinx全文检索
- Sphinx+Mysql+中文分词安装-实现中文全文搜索
- 又要改版了,启用sphinx 全文搜索
- Discuz!NT企业版之Sphinx全文搜索(上)
- Discuz!NT企业版之Sphinx全文搜索(下)
- spring data redis试用
- 搜索引擎技术介绍
- django全文搜索学习心得(三)whoosh 篇
- maven项目导入eclipse默认jre修改
- android EditText软键盘弹出控制
- django全文搜索学习心得(四)sphinx篇
- Java 单例模式探讨
- Oracle中删除外键约束、禁用约束、启用约束
- android调试初步(用eclipse 打断点调试 和使用logcat输出))(转)
- django全文搜索学习心得(五) whoosh 精简版
- Eclipse/My Eclipse 内存溢出解决方案
- 获取整个设备的大小
- sql 表数据复制
- android 知识点