什么是Elasticsearch?Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有HTTPWeb界面和无模式的JSON文档。Elasticsearch是用Java开发的。Elasticsearch有什么用?Elasticsearch使我们能够快速、近乎实时地存储、搜索和分析大量数据,并在几毫秒内做出响应。快速搜索响应的原因是它直接搜索索引而不是直接搜索文本。Elasticsearch-一些基本概念索引-不同类型文档和文档属性的集合。例如,文档集可能包含社交网络应用程序的数据。类型/映射-共享同一索引中存在的一组公共字段的文档集合。例如,索引包含社交网络应用程序的数据;可能有一种特定类型用于用户配置文件数据,另一种类型用于消息数据,另一种类型用于注释数据。文档-以特定方式以JSON格式定义的字段集合。每个文档都属于一种类型并位于索引中。每个文档都与一个唯一标识符(称为UID)相关联。字段——Elasticsearch字段可以包含多个相同类型的值(本质上是一个列表)。另一方面,在SQL中,一列只能包含所述类型的一个值。要在Django中安装和配置Elasticsearch,请安装DjangoElasticsearchDSL:$pipinstalldjango-elasticsearch-dsl然后将django_elasticsearch_dsl添加到INSTALLED_APPSELASTICSEARCH_DSL必须在django设置中定义。例如:ELASTICSEARCH_DSL={'default':{'hosts':'localhost:9200'},}声明要索引的数据,然后创建模型:#models.pyclassCategory(models.Model):name=models。CharField(max_length=30)desc=models.CharField(max_length=100,blank=True)def__str__(self):return'%s'%(self.name)要使该模型与Elasticsearch一起使用,请创建django_elasticsearch_dsl的子类。Document,在Document类内部创建一个Index类来定义我们的Elasticsearch索引、名称、设置等,最后使用Registry.register_document装饰器注册该类。它需要在应用程序目录下的documents.py中定义Document类。#documents.pyfromdjango_elasticsearch_dslimportDocumentfromdjango_elasticsearch_dsl.registriesimportregistryfrom.modelsimportCategory@registry.register_documentclassCategoryDocument(文档):classIndex:name='category'settings={'number_of_shards':1,'number_of_replicas':0}classDjango:model=['Categonamery'fields,desc',]fill:要创建和填充Elasticsearch索引和映射,请使用search_index命令:$pythonmanage.pysearch_index--rebuild如需更多帮助,请使用命令:$pythonmanage.pysearch_index--help现在,在执行时:category=Category(name="ComputerandAccessories",desc="abcdesc")category.save()该对象也将保存在Elasticsearch中(使用信号处理程序)。搜索:要获取elasticsearch-dsl-py搜索实例,请使用:s=CategoryDocument.search().filter("term",name="computer")#ors=CategoryDocument.search().query("match",description="abc")forhitins:print("Categoryname:{},description{}".format(hit.name,hit.desc))把elasticsearch结果转换成真正的Django查询集,注意这会花费一个SQL请求到使用Elasticsearch查询返回的ID检索模型实例。s=CategoryDocument.search().filter("term",name="computer")[:30]qs=s.to_queryset()#qsisjustadjangoquerysetanditiscalledwithorder_bytokeep#thesameorderastheelasticsearchresult.forcatinqs:print(cat.name)完成,如果你有有问题,欢迎留言交流。【编辑推荐】iOS15只是更好看的Linux吗?工作多年,你对Linux文件系统还不是很了解?白帽黑客手把手教你KaliLinux:DDOS与社会工程与蜜罐设置系统学习课程Linux系列课程--Linux中rsync备份数据的改进用例
