一. fields和keyword使用示例:
1.建立索引
PUT url
{}
2.建立映射
PUT url/_mapping/test
{
"properties": {
"url": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"date": {
"type": "date"
},
"pvs": {
"type": "integer"
},
"uvs": {
"type": "integer"
}
}
}
3.添加数据
PUT url/test/1
{
"url":"https://www.elastic.co/guide/en/elasticsearch/reference/5.2",
"date":"2017-02-01",
"pvs":1,
"uvs":2
}
4.搜索测试
GET url/test/_search
{
"query":{
"term":{
"url.keyword":"https://www.elastic.co/guide/en/elasticsearch/reference/5.2"
}
}
}
可以搜索到数据
GET url/test/_search
{
"query":{
"term":{
"url":"https://www.elastic.co/guide/en/elasticsearch/reference/5.2"
}
}
}
不可以搜索到数据
PS,在上面的例子中,url需要有两个用途,一个是作为聚合的字段;另一个是需要做全文检索。在ES中全文检索的字段是不能用来做聚合的,因此使用嵌套字段的方式,新增一个url.keyword字段,这个字段设置成keyword类型,不采用任何分词(这是5.0的新特性,如果使用以前版本,可以直接设置string对应的index属性即可);然后本身的url字段则采用默认的标准分词器进行分词。
fields作用://可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词
二. 查看某个字段的分词效果
GET /url/test/1/_termvectors?fields=url.keyword
三. 查看某个分词器的效果
POST _analyze
{
"analyzer": "simple",
"text": "https://www.elastic.co/guide/en/elasticsearch/reference/5.2"
}
四. 修改字段的分词器
上面如果想更换分词器,可以:
PUT url/_mapping/test
{
"properties": {
"url": {
"type": "string",
"analyzer": "simple",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"date": {
"type": "date"
},
"pvs": {
"type": "integer"
},
"uvs": {
"type": "integer"
}
}
修改Mapping前,需要先删除索引,然后重建索引。删除索引的命令为:
DELETE url
不想删除索引,只想改变Mapping?想得美....你当ES是孙悟空会72变?不过,你可以创建一个新的索引,然后把旧索引的数据导入到新索引就行了,这也不失为一种办法。如果想这么搞,可以参考reindex api,如果版本是5.0之前,那么你倒霉了!自己搞定吧!