基于ElasticSearch的小型网络空间搜索引擎

技术水平已经好久没有在进步了,我一直在琢磨为什么,归根到底就是意志力不够坚强!遇到问题的时候没有自己去思考怎么解决,而是一味的百度找答案,一旦找不到答案就放弃了,这样的我怎么会进步呢!

这次的开发,对我来说算是一个比较五脏俱全的项目,虽小但是功能确很强悍!采用了ElasticSearch分布式全文搜索引擎,那么这是个什么东西呢?

看一下百科介绍:

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

简单来说,它能让你检索数据的能力变得十分强悍!来说说如何部署 Elasticsearch 环境(要先安装JDK1.8这个我就不多说了)。

下载下面三个文件并全部解压到某盘的根目录(比如:D:/):

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-windows-x86_64.zip

https://artifacts.elastic.co/downloads/kibana/kibana-7.0.1-windows-x86_64.zip

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip

将 kibana-7.0.1-windows-x86_64 拖到 elasticsearch-7.0.0-windows-x86_64 目录下

将 elasticsearch-analysis-ik-7.2.0 拖到 elasticsearch-7.0.0-windows-x86_64/plugin 目录下

启动 elasticsearch-7.0.0-windows-x86_64\bin 目录下的 elasticsearch.bat

再启动 elasticsearch-7.0.0-windows-x86_64\kibana-7.0.1-windows-x86_64\bin 目录下的 kibana.bat

此时 Elasticsearch 环境就启动好了!你可以访问 http://127.0.0.1:9200 看看是否成功。

由于本项目的语言采用的是Python,所以在百度搜索了Python操作Elasticsearch的一些资料,归根到底还是CRUD:

首先得有一个对象:

es = Elasticsearch(["http://127.0.0.1:9200"]),

创建索引:

es.indices.create(index=‘sadness‘,ignore)

插入数据:

es.index(index="sadness",doc_type="doc",id=1,body={"name":"zhanshan","timestamp":datetime.now()})

Get获取数据:

res = es.get(index=‘indexName‘, doc_type=‘typeName‘, id=‘idValue‘)

删除数据:

es.delete(index=‘indexName‘, doc_type=‘typeName‘, id=‘idValue‘)

条件删除:

query = {‘query‘: {‘match‘: {‘sex‘: ‘famale‘}}}
es.delete_by_query(index=‘indexName‘, body=query, doc_type=‘typeName‘)

批量写入、删除、更新:

doc = [
     {"index": {}},
     {‘name‘: ‘jackaaa‘, ‘age‘: 2000, ‘sex‘: ‘female‘, ‘address‘: u‘北京‘},
     {"index": {}},
     {‘name‘: ‘jackbbb‘, ‘age‘: 3000, ‘sex‘: ‘male‘, ‘address‘: u‘上海‘},
     {"index": {}},
     {‘name‘: ‘jackccc‘, ‘age‘: 4000, ‘sex‘: ‘female‘, ‘address‘: u‘广州‘},
     {"index": {}},
     {‘name‘: ‘jackddd‘, ‘age‘: 1000, ‘sex‘: ‘male‘, ‘address‘: u‘深圳‘},
 ]
 doc = [
    {‘index‘: {‘_index‘: ‘indexName‘, ‘_type‘: ‘typeName‘, ‘_id‘: ‘idValue‘}}
    {‘name‘: ‘jack‘, ‘sex‘: ‘male‘, ‘age‘: 10 }
    {‘delete‘: {‘_index‘: ‘indexName‘, ‘_type‘: ‘typeName‘, ‘_id‘: ‘idValue‘}}
    {"create": {‘_index‘ : ‘indexName‘, "_type" : ‘typeName‘, ‘_id‘: ‘idValue‘}}
    {‘name‘: ‘lucy‘, ‘sex‘: ‘female‘, ‘age‘: 20 }
    {‘update‘: {‘_index‘: ‘indexName‘, ‘_type‘: ‘typeName‘, ‘_id‘: ‘idValue‘}}
    {‘doc‘: {‘age‘: ‘100‘}}
 ]
 es.bulk(index=‘indexName‘, doc_type=‘typeName‘, body=doc)

搜索所有数据:

es.search(index="my_index",doc_type="test_type")
或者

body = {
    "query":{
        "match_all":{}
    }
}
es.search(index="my_index",doc_type="test_type",body=body)

term查询:

body = {
    "query":{
        "term":{
            "name":"python"
        }
    }
}
# 查询name="python"的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

terms查询:

body = {
    "query":{
        "terms":{
            "name":[
                "python","android"
            ]
        }
    }
}
# 搜索出name="python"或name="android"的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

match与multi_match:

# match:匹配name包含python关键字的数据
body = {
    "query":{
        "match":{
            "name":"python"
        }
    }
}
# 查询name包含python关键字的数据
es.search(index="my_index",doc_type="test_type",body=body)

# multi_match:在name和addr里匹配包含深圳关键字的数据
body = {
    "query":{
        "multi_match":{
            "query":"深圳",
            "fields":["name","addr"]
        }
    }
}
# 查询name和addr包含"深圳"关键字的数据
es.search(index="my_index",doc_type="test_type",body=body)

ids:

body = {
    "query":{
        "ids":{
            "type":"test_type",
            "values":[
                "1","2"
            ]
        }
    }
}
# 搜索出id为1或2d的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

复合查询bool:
bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)

body = {
    "query":{
        "bool":{
            "must":[
                {
                    "term":{
                        "name":"python"
                    }
                },
                {
                    "term":{
                        "age":18
                    }
                }
            ]
        }
    }
}
# 获取name="python"并且age=18的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

切片式查询:

body = {
    "query":{
        "match_all":{}
    }
    "from":2    # 从第二条数据开始
    "size":4    # 获取4条数据
}
# 从第2条数据开始,获取4条数据
es.search(index="my_index",doc_type="test_type",body=body)

范围查询:

body = {
    "query":{
        "range":{
            "age":{
                "gte":18,       # >=18
                "lte":30        # <=30
            }
        }
    }
}
# 查询18<=age<=30的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

前缀查询:

body = {
    "query":{
        "prefix":{
            "name":"p"
        }
    }
}
# 查询前缀为"赵"的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

通配符查询:

body = {
    "query":{
        "wildcard":{
            "name":"*id"
        }
    }
}
# 查询name以id为后缀的所有数据
es.search(index="my_index",doc_type="test_type",body=body)

以上就是Python对Elasticsearch的基本操作了,我的项目就是采用了上面的部分代码。

项目预览:http://www.iqiyi.com/w_19saegbh6x.html

项目地址:https://github.com/BlackXu007/CrawlerEngine

参考文章:https://blog.csdn.net/u013429010/article/details/81746179

原文地址:https://www.cnblogs.com/blackxu/p/11219451.html

时间: 2024-08-02 00:25:18

基于ElasticSearch的小型网络空间搜索引擎的相关文章

FOFA网络空间搜索引擎使用教程

FOFA是白帽汇推出的一款网络空间搜索引擎,它通过进行网络空间测绘,能够帮助研究人员或者企业迅速进行网络资产匹配,例如进行漏洞影响范围分析.应用分布统计.应用流行度排名统计等. 官网:https://fofa.so/ 官方文档:https://fofa.so/help 下面是FOFA的一些简单使用案例: 注意:FOFA搜索关键词不区分大小写 1.搜索页面标题中含有“后台管理”关键词的网站和IP title="后台管理" 2.搜索HTTP响应头中含有“thinkphp”关键词的网站和IP

2019-2020-1学期 20192426 《网络空间安全导论》第二周学习总结

2019-2020-1学期20192426<网络空间安全专业导论>第二周学习总结 第四章:门和电路 4.1计算机和电学 1. 门(gate):对信号执行基本运算的设备,接受一个或多个输入信号,生成一个输出信号. 2. 电路(circuit):相互关联的门的组合,用于实现特定的逻辑函数. 一般来说,0~ 2伏的电压是低电平,由二进制数字0表示,2~5伏范围内的电压是高电平,由二进制数字1表示. 3. 描述门和电路的表示法有三种,它们互不相同,但却一样有效: 1. 布尔表达式 2. 逻辑框图 3.

2019-2020-1学期20192409《网络空间安全专业导论》第八周学习总结

第一章 网络空间安全概述 ==1.1. 工作和生活中的网络安全== 1.1.1 生活中常见的网络安全问题 1.账号密码被盗 2.信用卡被盗刷 3.除此之外还有网络诈骗和钓鱼网站等形形色色的网络空间安全事件 1.1.2 工作中常见的网络安全问题 1.网络设备面临的威胁 路由器是常用的网络设备,是企业内部网络与外界通信的出口.一旦黑客攻陷路由器,那么就掌握了控制内部网络访问外部网络的权力,将产生严重的后果. 2.操作系统面临的威胁 目前,我们常用操作系统是Windows和Linux,这两种系统也面临

2019-2020-1学期 20192411 《网络空间安全导论》第八周学习总结

第一章 网络空间安全概述 ==1.1. 工作和生活中的网络安全== 1.1.1 生活中常见的网络安全问题 1.账号密码被盗 2.信用卡被盗刷 3.除此之外还有网络诈骗和钓鱼网站等形形色色的网络空间安全事件 1.1.2 工作中常见的网络安全问题 1.网络设备面临的威胁 路由器是常用的网络设备,是企业内部网络与外界通信的出口.一旦黑客攻陷路由器,那么就掌握了控制内部网络访问外部网络的权力,将产生严重的后果. 2.操作系统面临的威胁 目前,我们常用操作系统是Windows和Linux,这两种系统也面临

2019-2020-1学期 20192404 《网络空间安全专业导论》第十一周学习总结

第5章?应用安全 5.1?应用安全概述 早期应用系统结构:客户/服务器模式 这个模式具有一定的缺陷,对应用系统.资源等有一定影响. 目前的应用系统结构:三层客户/服务器结构 浏览器<->Internet<->Web应用服务器<->中间件<->数据库 黑客攻击Web应用服务器.中间件.数据库,:利用漏洞.在网页中植入恶意代码. ?常见的Web应用安全漏洞 5.2.1?SQL注入漏洞 SQL注入漏洞是Web层面最高危的漏洞之一. SQL注入漏洞的形成原因就是:用

2019-2020-1学期20192405《网络空间安全专业导论》第十一周学习总结

什么是业务逻辑? 什么是正则表达式?   以上为提问 第5章 应用安全 5.1 应用安全概述 搭建方式的变化:早期的应用系统采用的客户/服务器模式是一种双层的结构,通常是将一台个人计算机做客户机使用,另外一台服务器用于存放后台的数据库系统,应用程序可以和客户端直接相连,中间没有其他的逻辑.程序的衣物逻辑储存在前台的应用程序中. 缺点: 定制程序无通用性,修改工作量极大 结构消耗客户机大量资源,对客户机负担大. 应用系统的新结构是一种三层客户/服务器结构,该结构构建了一种分隔式的应用程序.有三个层

2019-2020-1学期 20192429《网络空间安全专业导论》第十一周学习总结

2019-2020-1学期 20192429<网络空间安全专业导论>第十一周学习总结 # 第5章 应用安全 # 5.1 应用安全概述 早期的应用系统采用的客户/服务器模式是一种双层的结构,通常是将一台个人计算机做客户机使用,另外一台服务器用于存放后台的数据库系统,应用程序可以和客户端直接相连,中间没有其他的逻辑. 应用系统的新结构是一种三层客户/服务器结构,该结构构建了一种分隔式的应用程序. 攻击者主要攻击方面:利用Web应用系统.中间件或者数据库的漏洞进行攻击. 5.2 常见的Web应用安全

网络空间大搜索技术

由于泛在网络空间.网络应用模式和大数据的发展,国内研究人员对网络空间搜索技术有了新的认识,逐渐形成了网络空间智慧搜索暨网络空间大搜索技术. 国家自然科学基金委员会第120期双清论坛于9月28日-29日在北京召开.本次论坛主题为网络空间智慧搜索基础研究,共邀请了国内外25所大学和科研机构的41位著名专家参会.本次论坛由信息科学部.管理科学部.地球科学部.数理科学部和政策局联合主办,论坛主席由方滨兴院士.吴曼青院士.贾焰教授和陈熙霖研究员共同担任. 论坛开幕式由信息二处刘克处长主持,信息科学部常务副

2015年网络空间安全高端论坛暨第二届“世安杯”广东省大学生网络安全竞赛

<ignore_js_op> 远离了那个枪林弹雨的时代,却仍然嗅到字里行间的硝烟. 9月3日,抗战70周年纪念日.驻足在五星红旗下,我思考着,我们需要做的,不仅是纪念一场战争的结束,更应该注意到,另一场战争已悄然开始. 一句程序,可以打开网站,也可以注入SQL:一台电脑,可以看电影,也可以DDOS攻击:一群码农,可以写游戏,也可以使整个网络瘫痪.当我们调侃程序猿.攻城狮时,殊不知,在保卫着我们国家最脆弱的第五空间——网络空间的安全,也正是我们的攻城狮. 我们诚邀你参与这次活动.与来自各大高校.