分词:把一段中文或其他文字划分为一个个关键字。将搜索的信息分词,并把数据库或索引库中的数据分词,进行匹配。默认每个中文是一个词(不使用IK分词器时)
IK分词器提供了两个算法:ik_smart和ik_max_word,ik_smart为最少切分,ik_max_word为最细粒度切分。
添加自定义词到字典中
1.elasticsearch目录/plugins/ik/config/IKAnalyzer.cfg.xml
2.打开 IKAnalyzer.cfg.xml
文件,扩展字典,加入my.dic
3.编辑my.dic,写入自定义词组
4.重启ES
一种软件架构风格,用于客户端和软件的交互。
method | url地址 | 描述 |
---|---|---|
PUT(创建,修改) | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST(创建) | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST(修改) | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE(删除) | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET(查询) | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档ID |
POST(查询) | localhost:9200/索引名称/类型名称/文档id/_search | 查询所有数据 |
创建索引
PUT /test/type/1
{
"name" : "流柚",
"age" : 18
}
1.字符串类型
1>text:支持分词,全文检索、支持模糊、精确查询、排序,不支持聚合,且字符串长度无限制,适合大字段存储。
2>keyword:不支持分词,直接索引,支持模糊、精确查询、排序,支持聚合。
2.数值型:long、Interger、short、byte、double、float、half float、scaled float
3.日期类型:date
4.布尔类型:boolean
5.二进制:binary
修改文档
1.使用put,覆盖掉原来的值。但是漏掉哪个字段没有写,这个字段会消失
2.post的_updata,不会丢失字段
删除索引:DELETE /test
查询索引:GET test
复杂查询:
1>查询匹配:match:匹配(使用分词器进行解析(先分析文档,再查询))
_source:过滤字段、sort:排序、form、size:分页
// 查询匹配
GET /blog/user/_search
{
"query":{
"match":{
"name":"请"
}
}
,
"_source": ["name","desc"]
,
"sort": [
{
"age": {
"order": "asc"
}
}
]
,
"from": 0
,
"size": 1
}
2>多条件查询(bool):must相当于and、should相当于or、must_not相当于not、filter过滤
/// bool 多条件查询
must <==> and
should <==> or
must_not <==> not (... and ...)
filter数据过滤
boost
minimum_should_match
GET /blog/user/_search
{
"query":{
"bool": {
"must": [
{
"match":{
"age":3
}
},
{
"match": {
"name": "流"
}
}
],
"filter": {
"range": {
"age": {
"gte": 1,
"lte": 3
}
}
}
}
}
}
3>匹配数组:在此数组中的都会通过分词器查询出来
// 匹配数组 貌似不能与其它字段一起使用
// 可以多关键字查(空格隔开)
// match 会使用分词器解析(先分析文档,然后进行查询)
GET /blog/user/_search
{
"query":{
"match":{
"desc":"青蛙 啊 岸上"
}
}
}
4>精确查询:term通过倒排索引,指定词条查询,适合查询number、date、keyword、不适合text。
// 精确查询(必须全部都有,而且不可分,即按一个完整的词查询)
// term 直接通过 倒排索引 指定的词条 进行精确查找的
GET /blog/user/_search
{
"query":{
"term":{
"desc":"年 "
}
}
}