Restful认识和 IK分词器的使用

什么是Restful风格

Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。

使用Restful的好处:

透明性,暴露资源存在。

充分利用 HTTP 协议本身语义。

无状态,这点非常重要。在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。

Restful的典型特征:

① Server提供的RESTful API中,URL中只使用名词来指定资源。

“资源”是REST架构或者说整个网络处理的核心。比如:

GET http://api.itsource.cn/emp/323: 获取323号员工的基本资料;

GET http://api.itsource.cn/emps: 获取源码时代所有员工资料列表;

② REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露

URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。

比如:左边是错误的设计,而右边是正确的

GET /rest/api/getDogs -> GET /rest/api/dogs 获取所有小狗狗

GET /rest/api/addDogs -> POST /rest/api/dogs 添加一个小狗狗

POST /rest/api/editDogs/12 -> PUT /rest/api/dogs/12 修改一个小狗狗

POST /rest/api/deleteDogs/12 -> DELETE /rest/api/dogs/12 删除一个小狗狗

左边的这种设计,很明显不符合REST风格,URI 只负责准确无误的暴露资源,而 getDogs/addDogs...已经包含了对资源的操作,这是不对的。相反右边却满足了,它的操作是使用标准的HTTP动词来体现。

③ 用HTTP协议里的动词来实现资源的添加,修改,删除等操作。

即通过HTTP动词来实现资源的状态扭转:

GET 用来获取资源,

POST 用来新建资源(也可以用于更新资源),

PUT 用来更新资源,

DELETE 用来删除资源。

比如:

GET http://api.itsource.cn/emp/323 获取一个员工

POST http://api.itsource.cn/emp/232: 添加或修改一个员工

PUT http://api.itsource.cn/emp: 修改员工资料

DELETE http://api.itsource.cn/emp/323: 删除323号员工

IK分词器

ES默认对英文文本的分词器支持较好,但和lucene一样,如果需要对中文进行全文检索,那么需要使用中文分词器,同lucene一样,在使用中文全文检索前,需要集成IK分词器。

ES的IK分词器插件源码地址:https://github.com/medcl/elasticsearch-analysis-ik

① Maven打包IK插件

② 解压target/releases/elasticsearch-analysis-ik-5.2.2.zip文件

并将其内容放置于ES根目录/plugins/ik

③ 重启ES服务器

④ 测试分词器

POST _analyze

{

"analyzer":"ik_smart",

"text":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"

}

注意:IK分词器有两种类型,分别是ik_smart分词器和ik_max_word分词器。

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

文档映射Mapper

ES的文档映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型。(相当于写表结构)

ES字段映射

基本字段类型

字符串:text(分词),keyword(不分词)   StringField(不分词文本),TextFiled(要分词文本)

text默认为全文文本,keyword默认为非全文文本

数字:long,integer,short,double,float

日期:date

逻辑:boolean

复杂数据类型

对象类型:object

数组类型:array

地理位置:geo_point,geo_shape

1.1.1.   默认映射

查看索引类型的映射配置:GET {indexName}/_mapping/{typeName}

ES在没有配置Mapping的情况下新增文档,ES会尝试对字段类型进行猜测,并动态生成字段和类型的映射关系。

在实际应用场景中,一个对象的属性中,需要全文检索的字段较少,大部分字符串不需要分词,因此,需要利用全局模板覆盖自带的默认模板:

 1 PUT _template/global_template  //创建名为global_template的模板
 2 {
 3 "template":"*", //匹配所有索引库
 4 "settings":{"number_of_shards":1},//匹配到的索引库只创建1个主分片
 5 "mappings":{
 6 "_default_":{
 7 "_all":{
 8 "enabled":false //关闭所有类型的_all字段
 9 },
10 "dynamic_templates":[
11 {
12 "string_as_text":{
13 "match_mapping_type":"string",//匹配类型string
14 "match":"*_text", //匹配字段名字以_text结尾
15 "mapping":{
16 "type":"text",//将类型为string的字段映射为text类型
17 "analyzer":"ik_max_word",
18 "search_analyzer":"ik_max_word",
19 "fields":{
20 "raw":{
21 "type":"keyword",
22 "ignore_above":256
23 }
24 }
25 }
26 }
27 },
28 {
29 "string_as_keyword":{
30 "match_mapping_type":"string",//匹配类型string
31 "mapping":{
32 "type":"keyword"//将类型为string的字段映射为keyword类型
33 }
34 }
35 }
36 ]
37 }
38 }}

上面的意思:就是如果索引库里面字段 以_text结尾 就需要进行分词,如果不是,就不分词

测试:

(1)     拷贝上面代码执行

(2)     删除库 delete shop

(3)     创建库 put shop

(4)     加入数据测试

POST shop/goods/5

{

“id”:12,

“name_text”:”iphone  x”,

“local“:”cnsssss”

}

说明:上例中定义了两种动态映射模板string_as_text和string_as_keyword.

在实际的类型字段映射时,会依次匹配:

①字段自定义配置、

②全局dynamic_templates[string_as_text、string_as_keyword]、

③索引dynamic_templates[...]、

④ES自带的string类型映射,以最先匹配上的为准。

注意:索引库在创建的时候会继承当前最新的dynamic_templates,索引库创建后,修改动态模板,无法应用到已存在的索引库。

1.1.1.   最佳实践

映射的配置会影响到后续数据的索引过程,因此,在实际项目中应遵循如下顺序规则:

① 配置全局动态模板映射(覆盖默认的string映射)

② 配置字段映射(由于基本类型主要用于过滤和普通查询,因此,字段映射主要对需要全文检索的字段进行配置)

③ 创建、更新和删除文档

④ 搜索

原文地址:https://www.cnblogs.com/xiaohuziguai/p/10778946.html

时间: 2024-10-07 04:27:49

Restful认识和 IK分词器的使用的相关文章

ElasticSearch 用ik分词器建立索引(java API)

ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,作为当前流行的企业级搜索引擎,用于云计算中,能够达到实时搜索,并且具有稳定,可靠,快速安装,使用方便等多种优点,得到大多数企业的青睐. ElasicSearch可以通过终端建立索引,但是本人在做项目的时候用终端建立的索引,然后使用Java API进行数据的插入,始终得不到分词,最终的解决办法就是通过Java API

【Docker系列】认识ELK,docker安装ELK和IK分词器

1.ELK简介 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具. Elasticsearch是个开源分布式搜索引擎,提供搜集.分析.存储数据三大功能.它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据

IK分词器 整合solr4.7 含同义词、切分词、停止词

IK分词器如果配置成 <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" is

solr5.5.4整合IK分词器

1.下载IK分词器支持5.5.4的     http://download.csdn.net/detail/wang_keng/9535491 2.需要把分析器的jar包添加到solr工程中的tomcat的WEB-INF/lib下   cp IKAnalyzer2012FF_u2.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/ 3.需要把IKAnalyzer需要的扩展词典及停用词词典.配置文件复制到solr工程的WEB-INF/class

如何开发自己的搜索帝国之安装ik分词器

 Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词,我是中国人 不能简单的分成一个个字,我们更希望 “中国人”,“中国”,“我”这样的分词,这样我们就需要安装中文分词插件,ik就是实现这个功能的. elasticsearch-analysis-ik 是一款中文的分词插件,支持自定义词库. 现在开始安装ik分词器,安装之前,先说明一些变化: 之前可以在node节点上配置index默认的分词器,如果是多节点,那么在每个节点上都配置就行了.这个有点不灵活,

IK分词器原理与源码分析

原文:http://3dobe.com/archives/44/ 引言 做搜索技术的不可能不接触分词器.个人认为为什么搜索引擎无法被数据库所替代的原因主要有两点,一个是在数据量比较大的时候,搜索引擎的查询速度快,第二点在于,搜索引擎能做到比数据库更理解用户.第一点好理解,每当数据库的单个表大了,就是一件头疼的事,还有在较大数据量级的情况下,你让数据库去做模糊查询,那也是一件比较吃力的事(当然前缀匹配会好得多),设计上就应当避免.关于第二点,搜索引擎如何理解用户,肯定不是简单的靠匹配,这里面可以加

Elasticsearch5.1.1+ik分词器安装小记

一.安装elasticsearch 1.首先需要安装好java,并配置好环境变量,详细教程请看 http://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/# 2.安装ElasticSearch,下载rpm包: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm rpm -ivh elasticsearch-5.1.1.rp

搜索技术:solr+IK分词器配置

一.搭建solr服务器1.Apache官网下载solr,本次使用4.9.1版本2.解压solr,找到example,将webapps中的war包复制到tomcat的webapps下3.运行tomcat,关闭tomcat,得到解压后的solr文件夹,删除war包4.将example\lib\ext\*.jar复制到解压后的solr\WEB-INF\lib中5.将example文件下solr文件夹的地址放到步骤6的/put/your/solr/home/here位置6.修改web.xml <env-

[Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一.

在这里一下讲解着三个的安装和配置, 是因为solr需要使用tomcat和IK分词器, 这里会通过图文教程的形式来详解它们的安装和使用.注: 本文属于原创文章, 如若转载,请注明出处, 谢谢.关于设置IK分词器的文章 IK分词器: http://www.cnblogs.com/wang-meng/p/5814798.html 1, 解压tar文件首先我们在根目录下建立一个solr目录(使用命令: mkdir /solr):  然后查看目录是否生成成功:  解压solr/tomcat/IK 到sol