使用pysolr库操作solr(二 打造属于自己的搜索引擎)

来源:互联网 发布:易语言模块转源码 编辑:程序博客网 时间:2024/06/08 07:41

之前有文章讲了基础的如何使用pysolr1操作solr,以及如何使用haystack编写属于自己的搜索引擎,但是呢,老大来了命令,现在是2017年了,咱们不用solr 3那种老版本,就用solr5吧!嘤嘤,也就是说不能直接用haystack框架,要自己写一个了。于是乎,搞事开始。

1.环境版本
Django:1.8 (可直接使用pip,指定版本)
pysolr:3.6.0 (可直接使用pip,指定版本)
solr:5.4.0

2.编写调用solr的代码

solr = pysolr.Solr('your solr core address', timeout=10)def search_solr_data(q):    if q==None:        results = solr.search("*:*")    else:        results = solr.search("*:%s"%q)        number = results.hits        page = int(math.ceil(number/10.0))    page_content = {        'pageContent': results,        'page': page    }    return page_content#由于solr是分页传回的,因此需要统计总条数,从而形成总页码数def get_total_number():        total = solr.search("*:*")     number = total.hits     return number#为了以后实现数据切片,还是单独拿出来好勒def page_solr_data(q,page_no):      results = solr.search("*:%s" % q,**{"start":(int(page_no)-1)*10})    number = results.hits    page = int(math.ceil(number/10.0))     page_content = {        'pageContent': results,        'page': page    }    return page_content

3.编写查询视图
这里直接用了render_to_response实现了跳页,是不是hin方便?

def index(request):    errors = []    total = get_total_number()    if 'q' in request.GET:        q = request.GET['q']        if not q:            errors.append('请输入关键词')        else:            if 'page' in request.GET:                page_no = request.GET.get('page')                results = page_solr_data(q, page_no)            else:                results = search_solr_data(q)            context = {                'results':results,                'paginator': range(1,results['page']+1),                'query':q            }            return render_to_response('search_result.html', context)    return render_to_response('search.html', {'total':total,'errors': errors})

最后的最后就是编写前端啦,本人的前端代码写的太丑就不误人子弟了,借鉴的百度学术的搜索界面,而且还有一个分页框的问题没有解决。下面是目前的效果图,比haystack的自带view还是好看点~:
这里写图片描述

虽然代码写的有点丑,但是好歹是自己探索所写,希望对研究这个同道有所帮助吧。

0 0
原创粉丝点击