设为首页 收藏本站
查看: 1220|回复: 0

[经验分享] django haystack and solr

[复制链接]

尚未签到

发表于 2015-11-11 15:22:28 | 显示全部楼层 |阅读模式
  

安装haystack
$ pip install django-haystack
  


  需要安装并配置好solr,详见:猛击这里,接下来开始配置Django,首先在项目目录中新建search_sites.py文件,内容是:
  

import haystack
haystack.autodiscover()

编辑settings.py文件加入haystack模块,指定Solr作为搜索引擎:  
  

INSTALLED_APPS = (
#other apps
'haystack',
)
HAYSTACK_SITECONF = 'search_sites' #之前创建的文件名
HAYSTACK_SEARCH_ENGINE = 'solr'
HAYSTACK_SOLR_URL = 'http://127.0.0.1:8080/solr/'#solr所在服务器
HAYSTACK_SOLR_TIMEOUT = 60 * 5
HAYSTACK_INCLUDE_SPELLING = True
HAYSTACK_BATCH_SIZE = 100
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://127.0.0.1:8080/solr' #solr所在服务器
},
}在urls.py里引入haystack:  
  

url(r'^search/', include('haystack.urls')),

现在打开这个地址/search/会提示找不到相应的模板文件,在模板文件夹中创建/search/search.html:  
  

{% block content %}
<h2>Search</h2>
<form method=&quot;get&quot; action=&quot;.&quot;>
<table>
{{ form.as_table }}
<tr>
<td> </td>
<td>
<input type=&quot;submit&quot; class=&quot;btn btn-success&quot; value=&quot;Search&quot;>
</td>
</tr>
</table>
{% if query %}
<h3>Results</h3>
{% for result in page.object_list %}
<p>
<a href=&quot;#&quot;>{{ result.object.name }}</a>
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% if page.has_previous or page.has_next %}
<div>
{% if page.has_previous %}<a href=&quot;?q={{ query }}&page={{ page.previous_page_number }}&quot;>{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href=&quot;?q={{ query }}&page={{ page.next_page_number }}&quot;>{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
{% endblock %}

假设我要搜索的Model是test应用中的search_test。在test目录下创建search_indexes.py:  
  

from haystack import indexes, site
from apps.products.models import Product
class TestIndex(indexes.SearchIndex):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='name')
def get_model(self):
return Product
def index_queryset(self):
return self.get_model().objects.all()
site.register(search_test, TestIndex)但现在还无法搜索,要生成一个与现有Model对应的schema,把它写入Solr:  
  

python manage.py build_solr_schema > /etc/solr/conf/schema.xml

执行python mange.py rebuild_index,成功后就可以使用Solr提供的搜索功能了.  
  


  另可以能不需要模板来实现搜索,而是写一个接口提供给客户端,在上面的基础上做如下操作:
  

from haystack.query import SearchQuerySet
sqs = SearchQuerySet().auto_query(query_string=q) #q 为查询条件
然后根据具体需求来对查询结果集sqs操作。  
  另更新solr索引只需要:
  

python manage.py update_index

至于update_index的一些具体参数,经验证 有的不能使用
  

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138016-1-1.html 上篇帖子: Solr Hello word 下篇帖子: solr 4.9配置IKAnalyzer
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表