使用 IK 分词器

1、ik_smart 最小划分
2、ik_max_word  最细粒度划分
GET _analyze
{
  "analyzer": "ik_smart",
  "text": "是一个伟大的组织"
}

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "是一个伟大的组织"
}

IK 分词器增加自己的分词
IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">my.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">my_stop.dic</entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

ES RestFul 风格

关于索引的基本操作

1、创建一个索引
PUT /索引名/类型名/文档id
{请求体}

PUT /test1/type1/1
{
  "name": "张三",
  "age": 3
}

2、指定字段类型 —— 创建索引规则 mappings
PUT /test2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"  
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}

3、获取索引规则! 可以通过GET 请求获取具体信息
GET test2

4、查看默认信息
PUT /test3/_doc/1
{
  "name": "张三",
  "age": 3,
  "birthday": "1987-01-01"
}


GET test3

如果自己的文档字段没有指定,那么ES就会给我们默认配置字段类型
转存失败重新上传取消

扩展:通过命令 ES 索引情况! 通过 _cat/ 可以获得es的当前的很多信息
GET _cat/health
GET _cat/indices?v

5、修改
修改的话版本号会增加  "_version" : 3, "result" : "updated",
可以通过PUT 或 POST 修改

PUT /test3/_doc/1
{
  "name": "张三123",
  "age": 3,
  "birthday": "1987-01-01"
}

POST /test3/_doc/1/_update
{
  "doc":{
     "name": "狂神说456"
  }
}

6、删除索引

通过 DELETE 命令实现删除、根据请求判断是删除索引还是删除文档记录
DELETE test1

使用RestFul 风格操作索引是推荐的操作方法


关于文档的基本操作

1、添加数据
PUT /zhangsan/user/1
{
  "name": "张三",
  "age": 23,
  "birthday": "1997-01-05",
  "desc": "一顿操作猛如虎,一看工资2500",
  "tags":["技术宅", "温暖", "直男"]
}


PUT /zhangsan/user/2
{
  "name": "张三",
  "age": 23,
  "birthday": "1997-01-05",
  "desc": "法外狂徒",
  "tags":["渣男", "冷冻", "扩列"]
}


PUT /zhangsan/user/3
{
  "name": "李四",
  "age": 23,
  "birthday": "1997-01-05",
  "desc": "随便",
  "tags":["靓仔", "冷冻", "扩列"]
}

2、 获取数据 GET

GET /zhangsan/user/1
GET /zhangsan/user/2
GET /zhangsan/user/3

3、更新数据 PUT
PUT /zhangsan/user/3
{
  "name": "李四五",
  "age": 23,
  "birthday": "1997-01-05",
  "desc": "随便",
  "tags":["靓仔", "冷冻", "扩列"]
}
"_version" : 2, 表示更新的次数
  "result" : "updated",

4、POST _update 更新 (推荐使用)
POST /zhangsan/user/3/_update
{
  "doc": {
    "name": "李四五流",
    "desc": "不随便",
    "tags":["靓仔", "无所谓", "扩列"]
  }
}

PUT 如果不传值会覆盖数据,POST灵活性更好

5、简单搜索 
GET /zhangsan/user/3

简单的条件查询,可以根据默认的映射规则,产生基本的查询
GET zhangsan/user/_search?q=name:张三

6、复杂查询   select(排序,分页,高亮,模糊查询,精准查询)

"_score" : 0.8630463, 匹配度,值越高,匹配度越高
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "name": "李四"
    }
  }
}
hit:索引和文档的信息,查询的结果总数,查询出来的具体文档,数据中的东西就可以遍历出来了,可以通过score判断谁更加复杂结果。

输出结果不想要那么多! select name, desc from ----
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "name": "三"
    }
  },
  "_source": ["name", "desc"]
}
我们之后使用Java 操作 Es,所有的方法和对象就是这里面的key!

7、排序 sort 
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "name": "三"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
    ]
}


8、分页 from size  从几个开始 返回多少条
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "name": "三"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
    ],
    "from": 0,
    "size": 2
}

数据下标是从0开始的

/search/{current}/{pagesize}

布尔值查询 (多条件查询)
must(adn),所有的条件都要符合   where id=1 and name =xxx
should (or)两个条件满足其一即可
must_not (not)
filter 过滤
gt  >
lt <
gte >=
ite <=
GET zhangsan/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "三"
          }
        },
        {
          "match": {
            "age": 23
          }
        }
      ]
    }
  }
}

9、匹配多个条件 ( 多个条件空格隔开,只要满足其中一个结果就可以查出,可以通过分值判断)
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "tags": "男 技术"
    }
  }
}

10、精确查询 
term 查询时直接通过倒排索引指定的词条进行精确查询
关于分词:
term,直接查询精确的词
match,会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询)
两个类型
text:可以被分词器解析
keyword:不能被分词器解析
 PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc":{
        "type": "keyword"
      }
    }
  }
}

PUT testdb/_doc/1
{
  "name": "张三",
  "desc": "一顿操作猛如虎,一看工资2500"
}


PUT testdb/_doc/2
{
  "name": "张三1",
  "desc": "一顿操作猛如虎,一看工资3500"
}

GET _analyze
{
  "analyzer": "keyword",
  "text": "三"
}


GET _analyze
{
  "analyzer": "standard",
  "text": "张三"
}

GET testdb/_search
{
  "query": {
    "term": {
      "name": "三"
    }
  }
}

GET testdb/_search
{
  "query": {
    "term": {
      "desc": "一顿操作猛如虎,一看工资2500"
    }
  }
}

多个值匹配精确查询
GET testdb/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "11"
          }
        },
        {
          "term": {
             "t2": "44"
          }
        }
      ]
    }
  }
}


11、高亮查询 
在搜索的结果中可以高亮显示
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "name": "三"
    }
  },
  "highlight": {
    "fields": {
      "name":{}
    }
  }
}

自定义搜索高亮条件
GET zhangsan/user/_search
{
  "query": {
    "match": {
      "name": "三"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>",
    "post_tags": "</p>",
    "fields": {
      "name":{}
    }
  }
}

posted on 2020-06-02 17:11  大羽治不了水  阅读(127)  评论(0编辑  收藏  举报