一、简介 关于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目录中大家也看到一个命令:elasticsearchplugin,我们可以利用它来安装中文分词神器ik中文分词器,安装命令如下: binelasticsearchplugininstallmedclelasticsearchanalysisikreleasesdownloadv5。5。1elasticsearchanalysisik5。5。1。zip 接着,重新启动Elastic,就会自动加载这个新安装的插件。 五:数据的操作 1、新建Index,指定需要分词的字段: 命令 curlXPUTlocalhost:9200citiesd { mappings:{ city:{ properties:{ name:{ type:text, analyzer:ikmaxword, searchanalyzer:ikmaxword }, desc:{ type:text, analyzer:ikmaxword, searchanalyzer:ikmaxword } } } } } 上述操作新建一个名称为cities的Index,里面有一个名称为city的Type。person有两个属性:name和desc。analyzer是字段文本的分词器,searchanalyzer是搜索词的分词器。ikmaxword分词器是插件ik提供的,可以对文本进行最大数量的分词。{acknowledged:true,shardsacknowledged:true}是服务器返回的JSON值,acknowledgedtrue表示操作成功。 2、新增记录 向指定的IndexType发送PUT请求,就可以在Index里面新增一条记录。 命令 curlXPUTlocalhost:9200citiescity1d { name:北京, desc:帝都,北漂的人想出去,外边的人想北漂。 } 如图所示,服务器返回的JSON对象,会给出Index、Type、Id、Version等信息。 在请求的路径中,最后的1是该条记录的Id,它不一定是数字,任意字符串都可以。新增记录的时候,也可以不指定Id,这时要改成POST请求。 命令: curlXPOSTlocalhost:9200citiescityd { name:上海, desc:上海滩,多少人想成为许文强一样的人物 } 3、查看记录 向IndexTypeId发出GET请求,就可以查看这条记录。 命令 curllocalhost: 4、删除记录 删除记录就是发出DELETE请求。 命令 curlXDELETElocalhost:9200citiescity1 5、更新记录 更新记录就是使用PUT请求,重新发送一次数据。 命令: curlXPUTlocalhost:9200citiescityAXKyTASFQrU13vhMOrjd { name:上海, desc:上海滩,多少人想成为许文强一样的人物,还需要丁力一样的帮手 } 6、返回所有记录 使用GET方法,直接请求IndexTypesearch,就会返回所有记录。我们把刚才删除的北京添加进来,再查询: 命令 curllocalhost:9200citiescitysearch 7、全文搜索 Elastic有自己的查询语法,要求GET请求带有数据体。 命令: curllocalhost:9200citiescitysearchd { query:{match:{desc:北漂}} } 上面是查询语法,下面是查询结果。 8、逻辑运算 如果有多个搜索关键字,Elastic认为它们是or关系。 命令: curllocalhost:9200citiescitysearchd { query:{match:{desc:北漂许文强}} } 如果要执行多个关键词的and搜索,必须使用布尔查询。 命令: curllocalhost:9200citiescitysearchd { query:{ bool:{ must:〔 {match:{desc:北漂}}, {match:{desc:许文强}} 〕 } } } 没有结果返回。 elasticsearch在日常开发中用途很多,感兴趣可以动手试一试,了解一下它都有什么功能。