django+haystack+ElasticsearchSearch

django安装再次不介绍了

Elasticsearch参考该博主

先装docker,再一键安装docker pull elasticsearch:2.4.4
在此记录几个docker命令 docker pull 拉项目

  1. docker pull 拉项目
  2. docker run -d -p 9200:9200 -p 9300:9300 --name search elasticsearch:2.4.4 (运行Elasticsearch)
  3. docker ps查看进程
  4. docker images查看镜像
  5. curl 127.0.0.1:9200最后测试Elasticsearch有没有安装成功
如果运行成功会出现类似如下界面:
{
  "name" : "David Cannon",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "wAssfOTuT-6UzYW4HQ0GqQ",
  "version" : {
    "number" : "2.4.6",
    "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd",
    "build_timestamp" : "2017-07-18T12:17:44Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.4"
  },
  "tagline" : "You Know, for Search"

安装drf-haystack直接pip安装

在此遇到安装不上,直接拷贝服务器的成功运行

项目配置

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': '127.0.0.1:9200'
    },
}

# haystack搜索扩展
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://127.0.0.1:9200/',  # Elasticsearch服务器ip地址,端口号固定为9200
        'INDEX_NAME': 'comic',  # Elasticsearch建立的索引库的名称
    },
}

# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

构建索引

1、编写索引类


from comic.apps.models import Comic


class ComicIndex(indexes.SearchIndex, indexes.Indexable):
    """书籍索引数据模型类"""
    text = indexes.CharField(document=True, use_template=True)
    def get_model(self):
        """返回建立索引的模型类"""
        return Comic

    def index_queryset(self, using=None):
        """返回要建立索引的数据查询集"""
        return self.get_model().objects.all()

在这注意ComicIndex为模型名字加上Index,并且该类写在search_indexes.py文件,并且放在和模型文件同一个目录下

2、构造具体索引值

在template\search\indexes\app_name\model_name_text.txt下构造索引值,这个路径是固定的。如果不按照这个路径的话,就在text字段内使用template_name 参数,指定模板文件。

{{ object.title }}
{{ object.digest }}
{{ object.content }}

重写了搜索视图返回json数据

class MySearchView(SearchView):
‘’‘重写SearchView类’’’

# 设置搜索模板文件

def create_response(self):
    page = self.request.GET.get('page')
    # 获取搜索结果
    context = self.get_context()
    # 拼接参数, 返回
    data_list = {
        "code": 200,
        "msg": "success",
        "count": 1,
        "next": None,
        "previous": None,
    }
    data = []
    for book in context['page'].object_list:
        data.append({
            'id': book.object.id,
            'name': book.object.name,
            'author': book.object.author,
            'total_views': book.object.total_point,
            'author_note': book.object.author_desc,
            'cover': book.object.cover,
            'searchkey': context.get('query'),
            # 'page_size': context['page'].paginator.num_pages,
            # 'count': context['page'].paginator.count
        })
    data_list['data'] = data
    return http.JsonResponse(data=data_list, safe=False)

最后

python manage.py rebuild_index重新建立索引
几个坑

  1. 版本问题djagno 和Haystack版本不一样报
AttributeError: type object 'BaseCommand' has no attribute 'option_list'

卸掉Haystack重装一遍就好了

  1. render改掉之前版本django的render_to_response
ImportError: cannot import name 'render_to_response'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值