安装包解压后运行kibana.bat(es已经运行的情况下):http://localhost:5601/
ES文档操作
es是面向文档的,存储文档的同时对其进行索引使其能被搜索到。
1.创建文档:
PUT /lxy/demo1/1
{
"id":1,
"username":"张三"
}
2.读取文档:
//返回全部数据
GET /lxy/demo1/1
//返回部分数据
GET /lxy/demo1/1?_source=username
3.更新文档:
上传操作在将要被上传的文档已存在的情况下(通过文档id是否相同来判断)将会变成修改操作
//全局更新,如果你更新的时候漏写了字段,就会被覆盖,相当于全局覆盖
POST /lxy/demo1/1
{
"id":1,
"username":"王五"
}
//局部更新
POST /lxy/demo1/1/_update
{
"doc": {
"id": 1,
"username": "lisi"
}
}
两者区别是局部更新不会删除已有的但是更新中没有写的字段,它会保持原样
4.删除文档:
DELETE /lxy/demo1/1
5.批量读取文档:
//ids相当于存id的数组,可以存多个文档id
GET lxy/demo1/_mget
{
"ids":["1"]
}
6.分页搜索文档:
GET /lxy/_search?size=1&from=0
7.查询字符串搜索:
GET /lxy/demo1/_search?q=id:1
DSL查询与过滤
又es提供的专门的查询语句就叫DSL查询与过滤
需要传入query、from等参数用于查询
GET /lxy/demo1/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 10,
"_source": [
"id",
"username"
]
}
GET /lxy/demo1/_search
{
"query": {
"match": {
"username": "马六"
}
}
}
GET /lxy/demo1/_search
{
"query": {
"wildcard": {
"username": "马*"
}
}
}
关于过滤和查询,过滤结果可用于后续查询,过滤性能高于查询,一般是先过滤再查询
查询和过滤通过bool组合,查询用must、should或must not来表示,过滤用filter来表示
match会分词,term不会,match分词后会分别找到其对应的文档,并给出排序分数
GET _search
{
"query": {
"bool": {
"must": [
{
"match": {
"username": "马六 王五"
}
}
]
}
}
}
//比如这里会先过滤id为1的,再查询马六王五
GET _search
{
"query": {
"bool": {
"must": [
{
"match": {
"username": "马六 王五"
}
}
],
"filter": {
"term": {
"id": "1"
}
}
}
}
}
分词器与映射
分词器
在全文检索理论中,文档的查询是通过关键字查询文档索引来进行匹配,因此将文本拆分为有意义的单词,对于搜索结果的准确性至关重要,因此,在建立索引的过程中和分析搜索语句的过程中都需要对文本串分词。
ES的文档映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型
这两个比较常见:text(分词),keyword(不分词)
text默认为全文文本,keyword默认为非全文文本
//查看指定类型的映射
GET /lxy/demo1/_mapping
ES在没有配置Mapping的情况下新增文档,ES会尝试对字段类型进行猜测,并动态生成字段和类型的映射关系。
映射
如何自定义映射,记住要先修改映射再添加数据
delete lxy
put lxy
post /lxy/demo1/_mapping
{
"demo1": {
"properties": {
"price": {
"type": "long"
},
"name": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
}
}
}
}
get /lxy/demo1/_mapping
//全局映射
PUT _template/global_template
{
"template": "*",
"settings": { "number_of_shards": 1 },
"mappings": {
"_default_": {
"_all": {
"enabled": false
},
"dynamic_templates": [
{
"string_as_text": {
"match_mapping_type": "string",
"match": "*_text",
"mapping": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"fields": {
"raw": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
{
"string_as_keyword": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}}