Django+scrapy结合elasticsearch构建搜索引擎(一)

这个项目是大四上学期实习的一个项目。因为我正好也在学Scrapy,所以就以这个作为项目。也可能作为我的毕业设计。

github地址:https://github.com/tianmingbo/scrapy-elastic

一、elasticsearch使用

https://blog.csdn.net/T_I_A_N_/article/details/103253975 

elastic教程:https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html

二、建立索引

等同于MySql中的数据库

from elasticsearch_dsl import DocType, Date, Completion, Keyword, Text, Integer

from elasticsearch_dsl.analysis import CustomAnalyzer as _CustomAnalyzer

from elasticsearch_dsl.connections import connections

connections.create_connection(hosts=["localhost"])  # 连接服务器


class CustomAnalyzer(_CustomAnalyzer):
    def get_analysis_definition(self):
        # 避免报错
        return {}


ik_analyzer = CustomAnalyzer("ik_max_word", filter=["lowercase"])


class JobType(DocType):
    '''
    Text:
        会分词,然后进行索引
        支持模糊、精确查询
        不支持聚合

    keyword:
        不进行分词,直接索引
        支持模糊、精确查询
        支持聚合
    '''
    suggest = Completion(analyzer=ik_analyzer)
    title = Text(analyzer="ik_max_word")
    salary = Keyword()
    job_city = Text(analyzer="ik_max_word")
    work_years = Keyword()
    degree_need = Keyword()
    job_type = Keyword()
    job_need = Keyword()
    job_responsibility = Keyword()
    job_advantage = Keyword()
    job_url = Keyword()
    publish_time = Keyword()
    company_name = Text(analyzer="ik_max_word")
    company_url = Keyword()

    class Meta:
        index = "lagou"  # 索引===数据库
        doc_type = "job"  # 类型===表名


if __name__ == "__main__":
    JobType.init()  # 根据定义的类,生成mappings

三、爬虫获取数据

1、建立对各大招聘网站的爬虫。

2、数据分析。

3、保存到elastic中。

ElasticSearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据在生产环境变得更有价值。ElasticSearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elastic Search 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

在items.py 文件中将爬取的数据保存到elastic中,

    def save_to_es(self):
        #保存到es中
        job = JobType()
        job.title = self['title']
        job.salary = self["salary"]
        job.job_city = self["job_city"]
        job.work_years = self["work_years"]
        job.degree_need = self["degree_need"]
        job.job_type = self["job_type"]
        job.job_need = self["job_need"]
        job.job_responsibility = self["job_responsibility"]
        job.job_advantage = self["job_advantage"]
        job.job_url = self["job_url"]
        job.publish_time = self["publish_time"]
        job.company_name = self["company_name"]
        job.company_url = self["company_url"]

        job.save()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值