大家好,今天来为大家分享全文搜索引擎的特点的一些知识点,和全文搜索引擎Elasticsearch的初体验的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
关于JavaWeb的开发周边技术,搜索引擎也是经常被用到的,其中solr和es是被当作技术选型经常出现的,他们都是基于lucene,但是,你没法直接用Lucene,必须自己写代码去调用它的接口。而今天所讲的es,它是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。
首先就是要安装es,它是需要jdk的一个环境,这个想必大家都准备好了,然后去下载es的压缩包,或者用docker去启动一个es的容器,这里下载它的压缩包:
解压刚才下载的压缩包,然后进入bin目录,可以看到一些es的相关命令:
使用bin目录中的elasticsearch命令启动:
它会启动在9200端口,这是我们可以访问一下http://127.0.0.1:9200/:
看它的tagline:ouKnow,forSearch。证明启动成功了,可以开始我们的搜索了。
在使用es之前,先来了解一些它的基本概念:
1、Node:单个Elastic实例称为一个节点(node)
2、Cluster:一组节点构成一个集群(cluster),Elastic本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elastic实例。
3、Index:Elastic数据管理的顶层单位就叫做Index(索引),Elastic会索引所有字段,经过处理后写入一个反向索引(InvertedIndex)。查找数据的时候,直接查找该索引。
4、Document:Index里面单条的记录称为Document(文档)。许多条Document构成了一个Index。
5、Type:Document可以分组,这种分组就叫做Type,它是虚拟的逻辑分组,用来过滤Document。
在搜索引擎中,还有一个重要的设置,那就是中文分词的设置,毕竟国内开发不得不安装这个插件,就像编码处理一样,刚才在bin目录中大家也看到一个命令:elasticsearch-plugin,我们可以利用它来安装中文分词神器-ik中文分词器,安装命令如下:
/bin/elasticsearch-plugininstallhttps://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip
接着,重新启动Elastic,就会自动加载这个新安装的插件。
1、新建Index,指定需要分词的字段:
命令\ncurl-XPUT'localhost:9200/cities'-d'\n{\n"mappings":{\n"city":{\n"properties":{\n"name":{\n"type":"text",\n"analyzer":"ik_max_word",\n"search_analyzer":"ik_max_word"\n},\n"desc":{\n"type":"text",\n"analyzer":"ik_max_word",\n"search_analyzer":"ik_max_word"\n}\n}\n}\n}\n}'
上述操作新建一个名称为cities的Index,里面有一个名称为city的Type。person有两个属性:name和desc。analyzer是字段文本的分词器,search_analyzer是搜索词的分词器。ik_max_word分词器是插件ik提供的,可以对文本进行最大数量的分词。{"acknowledged":true,"shards_acknowledged":true}是服务器返回的JSON值,acknowledged=true表示操作成功。
向指定的/Index/Type发送PUT请求,就可以在Index里面新增一条记录。
命令\ncurl-XPUT'localhost:9200/cities/city/1'-d'\n{\n"name":"北京",\n"desc":"帝都,北漂的人想出去,外边的人想北漂。"\n}'
如图所示,服务器返回的JSON对象,会给出Index、Type、Id、Version等信息。
在请求的路径中,最后的1是该条记录的Id,它不一定是数字,任意字符串都可以。新增记录的时候,也可以不指定Id,这时要改成POST请求。
命令:\ncurl-XPOST'localhost:9200/cities/city'-d'\n{\n"name":"上海",\n"desc":"上海滩,多少人想成为许文强一样的人物"\n}'
3、查看记录
向/Index/Type/Id发出GET请求,就可以查看这条记录。
命令\ncurl'localhost:9200/cities/city/1?pretty=true'
4、删除记录
命令\ncurl-XDELETE'localhost:9200/cities/city/1'
5、更新记录
更新记录就是使用PUT请求,重新发送一次数据。
命令:\ncurl-XPUT'localhost:9200/cities/city/AXKyTASFQrU13vhMO-rj'-d'\n{\n"name":"上海",\n"desc":"上海滩,多少人想成为许文强一样的人物,还需要丁力一样的帮手"\n}'
6、返回所有记录
使用GET方法,直接请求/Index/Type/_search,就会返回所有记录。我们把刚才删除的北京添加进来,再查询:
命令\ncurl'localhost:9200/cities/city/_search'
7、全文搜索
Elastic有自己的查询语法,要求GET请求带有数据体。
命令:\ncurl'localhost:9200/cities/city/_search'-d'\n{\n"query":{"match":{"desc":"北漂"}}\n}'
上面是查询语法,下面是查询结果。
如果有多个搜索关键字,Elastic认为它们是or关系。
命令:\ncurl'localhost:9200/cities/city/_search'-d'\n{\n"query":{"match":{"desc":"北漂许文强"}}\n}'
如果要执行多个关键词的and搜索,必须使用布尔查询。
命令:\ncurl'localhost:9200/cities/city/_search'-d'\n{\n"query":{\n"bool":{\n"must":[\n{"match":{"desc":"北漂"}},\n{"match":{"desc":"许文强"}}\n]\n}\n}\n}'
没有结果返回。
elasticsearch在日常开发中用途很多,感兴趣可以动手试一试,了解一下它都有什么功能。
文章分享结束,全文搜索引擎的特点和全文搜索引擎Elasticsearch的初体验的答案你都知道了吗?欢迎再次光临本站哦!