使用分词器
ik_smart 最少拆分
ik_max_word 最细粒度拆分
GET _analyze
{
"analyzer": "ik_smart",
"text": "我爱北京天安门"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "我爱北京天安门"
}
配置自己的分词器
将需要的词写在dic文件中
关于索引基础操作
创建一个索引
PUT /test1/type1/1
{
"name":"张三",
"age":18
}
指定字段类型
PUT /test2
{
"mappings": {
"properties": {
"name":{
"type":"text"
},
"age":{
"type":"long"
},
"birthday":{
"type":"date"
}
}
}
}
获取具体信息
GET test2
也可以获取默认信息,如果文档字段没有指定类型,那么es会默认配置字段类型
使用条件查询
GET user/info/_search?q=name:张三
修改索引
- 可以继续提交使用put,覆盖,不建议使用
- 试用post
POST /test1/type1/1/_update
{
"doc":{
"name":"李四"
}
}
删除索引
delete test2
各种查询操作
查询
GET /user/info/_search
{
"query": {
"match": {
"name": "张三"
}
}
}
结果过滤,只返回name和desc
GET /user/info/_search
{
"query": {
"match": {
"name": "张三"
}
},
"_source": ["name","desc"]
}
排序
根据 age 字段进行排序,desc 降序,asc 升序
GET /user/info/_search
{
"query": {
"match": {
"name": "张三"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
结果分页 from代表从什么时候开始, size代表返回的数量
GET /user/info/_search
{
"query": {
"match": {
"name": "张三"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 20
}
布尔值查询
使用布尔值进行精准匹配 must必须(and) should 应该(or) must_not 必须不是
GET /user/info/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "张三"
}
}
]
}
}
}
filter过滤器筛选查询
- gt 大于
- gte 大于等于
- lte 小于
- lte 小于等于
GET /user/info/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "张三"
}
}
],
"filter": [
{
"range": {
"age": {
"gte":10
}
}
}
]
}
}
}
精确查询
term查询时直接通过倒排索引指定的词条进行精确查找
关于分词
- term , 直接查询精确的
- match,会使用分词器解析
两个类型,text,keyword
keyword 不会被分词器解析,会被当做整个词
高亮查询 *
搜索相关的词,会自动使用标签
GET /user/info/_search
{
"query": {
"match": {
"name": "张三"
}
},
"highlight": {
"fields": {
"name":{}
}
}
}
可以使用自定义html和css添加样式
GET /user/info/_search
{
"query": {
"match": {
"name": "张三"
}
},
"highlight": {
"pre_tags": "<b>",
"post_tags": "</b>",
"fields": {
"name":{}
}
}
}