四十九 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页

逻辑处理函数  计算搜索耗时  在开始搜索前:start_time=datetime.now()获取当前时间  在搜索结束后:end_time=datetime.now()获取当前时间  last_time=(end_time-start_time).total_seconds()结束时间减去开始时间等于用时,转换成秒fromdjango.shortcutsimportrender#Createyourviewshere.fromdjango.shortcutsimportrender,HttpResponsefromdjango.views.generic.baseimportViewfromapp1.modelsimportlagouType#导入操作elasticsearch(搜索引擎)类importjsonfromelasticsearchimportElasticsearch#导入原生的elasticsearch(搜索引擎)接口client=Elasticsearch(hosts=["127.0.0.1"])#连接原生的elasticsearchfromdatetimeimp...

四十八 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能

Django实现搜索功能 1、在Django配置搜索结果页的路由映射"""pachongURLConfigurationThe`urlpatterns`listroutesURLstoviews.Formoreinformationpleasesee:https://docs.djangoproject.com/en/1.10/topics/http/urls/Examples:Functionviews1.Addanimport:frommy_appimportviews2.AddaURLtourlpatterns:url(r'^$',views.home,name='home')Class-basedviews1.Addanimport:fromother_app.viewsimportHome2.AddaURLtourlpatterns:url(r'^$',Home.as_view(),name='home')IncludinganotherURLconf1.Importtheinclude()function:fromdjango.conf.urlsimporturl...

四十七 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

  elasticsearch(搜索引擎)提供了自动补全接口官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html 1、创建搜索自动补全字段suggest自动补全需要用到一个字段名称为suggest类型为Completion类型的一个字段所以我们需要用将前面的elasticsearch-dsl操作elasticsearch(搜索引擎)增加suggest类型为Completion注意:因为elasticsearch-dsl源码问题,设置字段为Completion类型指定分词器时会报错,所以我们需要重写CustomAnalyzer类只有Completion类型才是,其他类型不用,其他类型直接指定分词器即可#!/usr/bin/envpythonfromdatetimeimportdatetimefromelasticsearch_dslimportDocType,Date,Nested,Boolean,analy...

四十六 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中

前面我们讲到的elasticsearch(搜索引擎)操作,如:增、删、改、查等操作都是用的elasticsearch的语言命令,就像sql命令一样,当然elasticsearch官方也提供了一个python操作elasticsearch(搜索引擎)的接口包,就像sqlalchemy操作数据库一样的ORM框,这样我们操作elasticsearch就不用写命令了,用elasticsearch-dsl-py这个模块来操作,也就是用python的方式操作一个类即可 elasticsearch-dsl-py下载下载地址:https://github.com/elastic/elasticsearch-dsl-py文档说明:http://elasticsearch-dsl.readthedocs.io/en/latest/首先安装好elasticsearch-dsl-py模块 1、elasticsearch-dsl模块使用说明create_connection(hosts=['127.0.0.1']):连接elasticsearch(搜索引擎)服务器方法,可以连接多台服务器cl...

四十五 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

 bool查询说明filter:[],字段的过滤,不参与打分must:[],如果有多个查询,都必须满足【并且】should:[],如果有多个查询,满足一个或者多个都匹配【或者】must_not:[],相反查询词一个都不满足的就匹配【取反,非】#bool查询#老版本的filtered已经被bool替换#用bool包括mustshouldmust_notfilter来完成#格式如下:#bool:{#"filter":[],字段的过滤,不参与打分#"must":[],如果有多个查询,都必须满足【并且】#"should":[],如果有多个查询,满足一个或者多个都匹配【或者】#"must_not":[],相反查询词一个都不满足的就匹配【取反,非】#}  建立测试数据#建立测试数据POSTjobbole/job/_bulk{"index":{"_id":1}}{"salary":10,"title":"python"}{"index":{"_id":2}}{"salary":20,"title":"Scrapy"}{"index":{"_id":3}}{"salary...

四十四 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

1、elasticsearch(搜索引擎)的查询elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据查询分类:  基本查询:使用elasticsearch内置的查询条件进行查询  组合查询:把多个查询条件组合在一起进行复合查询  过滤:查询同时,通过filter条件在不影响打分的情况下筛选数据  2、elasticsearch(搜索引擎)创建数据首先我们先创建索引、表、以及字段属性、字段类型、添加好数据注意:一般我们中文使用ik_max_word中文分词解析器,所有在需要分词建立倒牌索引的字段都要指定,ik_max_word中文分词解析器系统默认不是ik_max_word中文分词解析器ik_max_word中文分词解析器是elasticsearch(搜索引擎)的一个插件,在elasticsearch安装目录的plugins/analysis-ik文件夹里,版本为5.1.1更多说明:https://github.com/medcl/elasticsearch-analysis-ik说明:#创建索引(设置字段类型)#注意:一般我...

四十三 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

1、映射(mapping)介绍映射:创建索引的时候,可以预先定义字段的类型以及相关属性elasticsearch会根据json源数据的基础类型猜测你想要的字段映射,将输入的数据转换成可搜索的索引项,mapping就是我们自己定义的字段数据类型,同时告诉elasticsearch如何索引数据以及是否可以被搜索作用:会让索引建立的更加细致和完善类型:静态映射和动态映射  2、内置映射类型(也就是数据类型)string类型:text,keyword两种  text类型:会进行分词,抽取词干,建立倒排索引  keyword类型:就是一个普通字符串,只能完全匹配才能搜索到数字类型:long,integer,short,byte,double,float日期类型:datebool(布尔)类型:booleanbinary(二进制)类型:binary复杂类型:object,nestedgeo(地区)类型:geo-point,geo-shape专业类型:ip,competion  3、属性介绍store属性index属性null_value属性analyzer属性...

四十二 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作

注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想要操作多条数据就会产生多次请求,所以就有了mget和bulk批量操作,mget和bulk批量操作是一次请求可以操作多条数据 1、mget批量操作(查询)批量操作(同一个索引同一个表里的批量查询)说明:#mget批量操作(同一个表里的批量查询)GET_mget{"docs":[{"_index":"索引名称","_type":"表名称","_id":id号},{"_index":"索引名称","_type":"表名称","_id":id号}]}代码:#mget批量操作(同一个表里的批量查询)GET_mget{"docs":[{"_index":"jobbole","_type":"job","_id":1},{"_index":"jobbole","_type":"job","_id":2}]}  批量操作(同一个索引同一个表里的不同id批量查询)#批量操作(同一个索引同一个表里的不同id批量查询)GETjobbole/job/_mget{"ids":[1,2]}  批量操作...

四十一 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查

elasticsearch(搜索引擎)基本的索引和文档CRUD操作也就是基本的索引和文档、增、删、改、查、操作注意:以下操作都是在kibana里操作的elasticsearch(搜索引擎)都是基于http方法来操作的GET 请求指定的页面信息,并且返回实体主体POST 向指定资源提交数据进行处理请求,数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改PUT 向服务器传送的数据取代指定的文档的内容DELETE 请求服务器删除指定的页面   1、索引初始化,相当于创建一个数据库用kibana创建代码说明#初始化索引(也就是创建数据库)#PUT索引名称"""PUTjobbole#设置索引名称{"settings":{#设置"index":{#索引"number_of_shards":5,#设置分片数"number_of_replicas":1#设置副本数}}}"""代码#初始化索引(也就是创建数据库)#PUT索引名称PUTjobbole{"settings":{"index":{"number_...

四十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)倒排索引

 倒排索引倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(invertedindex)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(invertedfile)。  倒排索引原理就是将一句话进行分词并记录分词所存在的文章,当用户搜索词时可以直接查找到当前词所存在的文章   倒排索引分词权重记录(词瓶) 分词权重记录,是通过(TF-IDF)来实现的,详情https://baike.so.com/doc/433640-459181.html  倒排索引待解决的问题这些问题elasticsearch(搜索引擎)已经解决 ...

三十九 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念

elasticsearch的基本概念  1、集群:一个或者多个节点组织在一起  2、节点:一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫微角色的名字  3、分片:将索引(相当于数据库)划分为多份的能力,允许水平分割和扩展,对个分片响应请求,提供性能和吞吐量  3、副本:创建分片的一份或者多份的能力(相当于备份),在一个节点失败其余节点可以顶上 elasticsearch的数据存储概念  1、index(索引,可以理解为数据库)  2、type(类型,可以理解为数据库表)  3、documents(文档,可以理解为数据库表的行)  4、fields(可以理解为数据库表的列)  http方法GET 请求指定的页面信息,并且返回实体主体POST 向指定资源提交数据进行处理请求,数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改PUT 向服务器传送的数据取代指定的文档的内容DELETE 请求服务器删除指定的页面 ...

三十八 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

elasticsearch(搜索引擎)介绍ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二最流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。 全文搜索引擎种类  1、elasticsearch  2、solr  3、sphinx  关系数据搜素缺点,也就是直接通过数据库搜索 elasticsearch(搜索引擎)都能弥补以上缺...

三十七 Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(BloomFilter)详解 基本概念如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路.但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。不过世界上还有一种叫作散列表(又叫哈希表,Hashtable)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(BitArray)中的一个点。这样一来,我们只要看看这个点是不是1就知道可以集合中有没有它了。这就是布隆过滤器的基本思想。Hash面临的问题就是冲突。假设Hash函数是良好的,如果我们的位阵列长度为m个点,那么如果我们想将冲突率降低到例如1%,这个散列表就只能容纳m/100个元素。显然这就不叫空间有效了(Space-efficient)。解决方法也简单,就是使用多个Hash,如果它们有一个说元素不在集合中,那肯定就不在。如果它们都说在,虽然也有一...

三十六 Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码

 scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开源模块 scrapy-redis的依赖Python2.7,3.4or3.5,Python支持版本Redis>=2.8,Redis版本Scrapy >=1.1,Scrapy版本redis-py >=2.10,redis-py版本,redis-py是一个Python操作Redis的模块,scrapy-redis底层是用redis-py来实现的 下载地址:https://pypi.python.org/pypi/scrapy-redis/0.6.8我们以scrapy-redis/0.6.8版本为讲 一、安装scrapy-redis/0.6.8版本的依赖  首先安装好scrapy-redis/0.6.8版本的依赖关系模块和软件 二、创建scrapy项目  执行命令创建项目:scrapystartprojectfbshpch 三、将下载的scrapy-redis-0.6.8模块包解压,解压后将包里的crapy-redis...

三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

 1、分布式爬虫原理  2、分布式爬虫优点 3、分布式爬虫需要解决的问题 ...
首页上一页...1920212223...下一页尾页