ElasticSearch(三)基础语法

接入中文分词:
地址:github地址

集群的所有节点都要安装

  • 创建索引
PUT /test
{
   "settings" : {
      "number_of_shards" : 1,
      "number_of_replicas" : 1
 }

number_of_shards:分片数量
number_of_replicas:副本数量

更新其replicas状态,但是不能更新shards状态

PUT /test/_settings
{
      "number_of_replicas" : 0
}
  • 指定id创建索引
PUT /test/_doc/1
{
  "name":"赵云",
  "sname":"赵子龙",
  "ename":"zhaoxiaoyun",
  "age":23
}
#或者(可防止重复创建)
POST /test/_doc/1/_create
{
  "name":"赵云",
  "sname":"赵子龙",
  "ename":"zhaoxiaoyun",
  "age":23
}

_doc为type字段,可自定义命名,type字段在7.x版本已废弃

  • 指定id修改索引
POST /test/_doc/1/_update
{
  "doc":{
    "name":"赵云1"
  }
}
  • 删除指定id索引
DELETE /test/_doc/1
  • 删除索引
DELETE /test
  • 搜索全部
GET /test/_search
  • 根据id搜索
GET /test/_doc/1
  • 结构化创建索引
PUT /test
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1
  },
  "mappings": {
    "_doc":{
      "properties": {
        "name":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},
        "sname":{"type": "text","analyzer": "ik_smart"},
        "ename":{"type": "text","analyzer": "english"},
        "age":{"type": "integer"}
      }
    }
  }
}

analyzer指定分词器,stander:es中文默认分词器,会将每个字都分开;ik_max_word:ik中文分词器,根据ik的配置库(结尾有详细说明)进行分词;ik_smart:ik智能分词器,使用的是贪心算法;english:英文分词器,会提取词干和去掉停用词

  • 查询所有
GET /test/_search
{
  "query":{
    "match_all": {}
  }
}
  • 分页查询
GET /test/_search
{
  "query":{
    "match_all": {}
  },
  "from":0,
  "size":1
}
  • 条件查询
GET /test/_search
{
  "query":{
    "match": {"name":"赵云"}
  }
}
  • 排序
GET /test/_search
{
  "query":{
    "match": {"name":"赵云"}
  },
  "sort":[
  	{"age":{"order":"desc"}}
  ]
}
  • 聚合
GET /test/_search
{
  "query":{
    "match": {"name":"赵云"}
  },
  "sort":[
  	{"age":{"order":"desc"}}
  ],
  "aggs":{
  	"group_by_age":{
  		"terms":{
  			"field":"age"
  		}
  	}
  }
}

group_by_age为自定义名称

  • 分词
GET /test/_analyze
{
  "field": "sname",
  "text": "武汉市长江大桥"
}

分词的妙用:
既然有了ik分词,是不是就意味着stander分词没用了?其实并不是这样的哦
#托底,搜江大桥没有,在建了ik的字段,在建一个一样的stander的字段。如果ik搜不到 就可以搜这一个stander分词的,这样保证会又结果。但是慎用,因为占空间,有些特殊的系统可以使用。
#其实ik也还有一个解决的办法 叫砍词:江大桥 我可以砍掉一个词,我砍掉江 就出来了。砍词的策略可以自定义
比如:江大桥这个词,在电商中,我们系统假设有大桥这个品牌。 那我们可以一个个的是去试一下,比如可以用字符串匹配找出大桥。也有很多系统很粗暴,直接从第一个字开始砍,一直砍到有为止。
#既有英文又有中文的 直接选ik
#如果不用砍词那就要去词库加词,比如加入江大桥就可以了。具体路径是在es的:
elasticsearch/config/analysis-ik/main.dic(使用install命令安装ik)
elasticsearch/plugins/ik/config/main.dic(使用解压安装ik)
注意集群的话那就要所有的es都需要加的哦

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×