django使用docker用elasticsearch和haystack

本文介绍了如何在Ubuntu系统中利用Docker下载并运行Elasticsearch,包括修改配置文件和启动服务。接着讲解了如何安装Haystack和Elasticsearch库,并配置相关设置。通过创建索引类和模板文件,实现了数据的全文检索功能。最后,展示了在模板中定义搜索表单并渲染结果的方法。
摘要由CSDN通过智能技术生成

一,在ubuntu中用docker下载elasticsearch

  1. 从仓库拉取镜像

    sudo docker image pull delron/elasticsearch-ik:2.4.6-1.0

  2. 解压本地的tar

    sudo docker load -i elasticsearch-ik-2.4.6_docker.tar

  3. 修改配置文件

    1. elasticsearc-2.4.6/config/elasticsearch.yml第54行。
    2. network.host:192.123.112.13
    3. 配置文件可以百度找一个
  4. 运行elasticsearch

    sudo docker run -dti --name=elasticsearch --network=host -v 配置文件地址:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0

二、使用haystack和elasticsearch

  1. 下载

    pip install django-haystack
    pip install elasticsearch==2.4.6

  2. 注册apps

	INSTALLED_APPS = [
    	'haystack', # 全文检索 	 
    ]
  1. 配置url
url(r'^search/', include('haystack.urls')),   #名称固定写法
  1. 配置haystack
# Haystack
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://192.168.103.158:9200/', # Elasticsearch服务器ip地址,端口号固定为9200
        'INDEX_NAME': 'meiduo_mall', # Elasticsearch建立的索引库的名称
    },
}

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

三、建立数据库索引

  1. 创建索引类search_indexes.py
from haystack import indexes
from .models import SKU

# 注意这里是indexes.SearchIndex不是indexes.SearchField
class SKUIndex(indexes.SearchIndex, indexes.Indexable):
    """SKU索引数据模型类"""
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        """返回建立索引的模型类"""
        return SKU

    def index_queryset(self, using=None):  
        """返回要建立索引的数据查询集"""
        return self.get_model().objects.filter(is_launched=True)
  1. 创建text字段索引值模板文件
    在template文件下创建

search/indexes/创建索引的应用名称/ 模型类名称_text.txt

{{ object.id }} 这是字段例子
{{ object.name }}
{{ object.caption }}
  1. 手动生成索引

python manage.py rebuild_index

三、在模板中定义

  1. 需要将修改method=“get” action="/search/
  2. 需要将输入框name修改为q ,name="q"
<form method="get" action="/search/">
        <input type="text" class="input_text fl" name="q" placeholder="搜索商品">
        <input type="submit" class="input_btn fr" name="" value="搜索">
</form>

点击按钮
在这里插入图片描述
出现这个,就对了

到了这将search的html移入templates的search中,进行渲染就好了

四、渲染页面
在haystack.views中已经返回了一些值
在这里插入图片描述
query:搜索关键字
paginator:分页paginator对象
page:当前页的page对象(遍历page中的对象,可以得到result对象)
result.objects: 当前遍历出来的模型类对象。

            {% for sku in page %}

                <div class="col mb-4" style="height: 350px;;">

                    <div class="card h-100"><a href="javascript:;">
                        <img src="{{ sku.object.default_image.url }}" style="height: 70%;" class="card-img-top">
                        <div class="card-body">

                            <p class="card-text" style="font-size:10px">{{ sku.object.name }}</p>

                            <span id="pi" style="font-size:10px;color: red;">¥{{ sku.object.price }}</span>
                        </div>
                    </a>
                    </div>
                </div>
            {% endfor %}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值