drf中elasticsearch、haystack的使用

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 简单使用

elasticsearch的安装

使用docker安装
通过pull拉取,或者压缩包解压。
更改配置文件,
image.png
image.png
将network.host修改为自己的虚拟机ip。

3.使用docker运行elasticsearch,输入命令$ sudo docker run -dti --name=elasticsearch --network=host -v /home/python/elasticsearch-2.4.6/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0

配置

在django框架中需要通过django-haystack来对接搜索引擎的使用,所以务必要在python虚拟环境中安装django-haystack和elasticsearch.

pip3 install django-haystack
pip3 install elasticsearch
1
2
django-haystack是专门给 django 提供搜索功能的。 django-haystack提供了一个统一的API搜索接口,底层可以根据自己需求更换搜索引擎( Solr, Elasticsearch,Whoosh, Xapian 等等),类似于 django 中的 ORM插件,提供了一个操作数据库接口,但是底层具体使用哪个数据库是可以在配置文件中进行设置的。

在django中可以通过使用haystack来调用Elasticsearch搜索引擎。而在drf框架中,也有一个对应的drf-haystack模块,是django-haystack进行封装处理的。

setting中的配置

注册apps

INSTALLED_APPS = [

'haystack',

]

Haystack

HAYSTACK_CONNECTIONS = {

'default': {
    'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    # elasticsearch运行的服务器ip地址,端口号默认为9200
    'URL': 'http://192.168.153.162:9200/', # 配置 IP:port
    # elasticsearch建立的索引库的名称,一般使用项目名作为索引库
    'INDEX_NAME': 'object_name',
},

}

设置在Django运行时,如果有数据产生变化(添加、修改、删除),

haystack会自动让Elasticsearch实时生成新数据的索引

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

模型类的创建

完成索引类的创建,一定要在对应的app下创建索引文件indexes_search.py(注:必须是这个名字,否则无法索引)。
from haystack import indexes

from .models import SKU

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)

要在templates下创建text文件
具体在templates/search/indexes/goods/sku_text.txt文件中定义

{{ object.title }}
{{ object.content }}
{{ object.id }}

1
2
3
4
此模板指明SKU的id、name、caption作为text字段的索引值来进行关键字索引查询。

手动生成初始索引
$ python manage.py rebuild_index

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
存储 监控 安全
扩展 Elasticsearch
扩展 Elasticsearch
37 2
|
3月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
157 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
8月前
|
存储 搜索推荐 索引
5个 Elasticsearch 核心组件
Elasticsearch 是基于 Lucene 的分布式搜索引擎,具备高可用和多租户特性。其核心组件包括:节点(Node)、集群(Cluster)、索引(Index)、分片(Shard)和副本(Replica)。节点是集群中的服务器,可设置为主、数据或客户端节点。集群由多个节点组成,通过集群名称区分。索引是文档集合,7.x 版本后每个索引仅含一种类型。分片是索引的子集,可分布于不同节点,分为主分片和副本分片,副本用于提高数据可用性和性能。【5月更文挑战第5天】
112 1
|
SQL JSON 自然语言处理
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
|
JSON Java 测试技术
【Elasticsearch】RestClient操作文档
【Elasticsearch】RestClient操作文档
165 0
|
8月前
|
Java 索引
ElasticSearch DSL操作
ElasticSearch DSL操作
118 1
|
存储 搜索推荐 Java
SpringData集成Elasticsearch
SpringData集成Elasticsearch
SpringData集成Elasticsearch
|
存储 SQL 自然语言处理
1.【Elasticsearch】Elasticsearch从入门到放弃-Elasticsearch概念篇
【Elasticsearch】Elasticsearch从入门到放弃-Elasticsearch概念篇
|
API PHP
【laravel项目】@24 laralve使用elasticsearch,并获取elasticsearch的数据
【laravel项目】@24 laralve使用elasticsearch,并获取elasticsearch的数据
216 0
【laravel项目】@24 laralve使用elasticsearch,并获取elasticsearch的数据
|
自然语言处理 数据库 索引
Python编程:elasticsearch库操作Elasticsearch
Python编程:elasticsearch库操作Elasticsearch
259 0