Elasticsearch索引管理

358 阅读2分钟

创建索引

自动创建

ES与MongoDB类似,在创建文档时,如果对应的索引不存在,ES会自动帮我们创建索引

PUT http://localhost:9200/blog/article/1
# 建立blog,在blog下建立article类型,在类型下建立文档1
{
    "title":"New version of Elasticsearch released!",
    "content":"...",
    "tags":[
        "announce",
        "elasticsearch",
        "release"
        ]
 }

其中blog和article由ES自动创建,索引的自动创建功能可以在elasticsearch.yml中关闭,只需要设置action.auto_create_index: false

手动创建索引

手动创建索引的好处在于可以设置分片和副本数,一般默认是5分片1副本

PUT http://localhost:9200/blog

{
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 2
    }
}

删除索引

DELETE http://localhost:9200/blog

配置映射

ES是一个无模式的搜索引擎,它不像关系型数据库一样需要事先定义表来描述数据,但ES也支持事先对数据的映射。索引是有多个类型的,利用映射来定义类型

{
    "mappings": {
        "post":{
            "properties": {
                "id":{"type":"long","store":"yes","precision_step":“0},
                "name":{"type":"string","store":"yes","index":"analyzed"},
                
            }
        }
    }
}

上述json就是定义了一个post类型,在类型中定义了两个字段,字段里面可以定义字段行为和特有的属性,常见的属性如下

1. 类型(type)
2. index:可选择的值是analyzed和no,如果是no则表示字段可以被搜索
3. store:可选值为yes和no,指定了该字段的原始值是否被写入索引中。
4. boost:文档中该字段的重要性

开箱即用的分析器

1. standard:方便大多数欧洲语言的标准分析器
2. simple:这个分析器基于非字母字符来分离文本,并转换为小写形式
3. whitespace:这个分析器基于空格符来分离所提供的值
4. stop:与simple类似,不过能提供停止词
5. keyword:这是一个非常简单的分析器,只传入提供的值

自定义分析器

{
    "settings":{
        "index":{
            "analysis":{
                "analyzer":{
                    "en":{
                        "tokenizer":"standard",
                        "filter":[
                            "asciifolding",
                            "lowercase",
                            "ourEnglishFilter"
                        ]
                    }
                },
                "filter":{
                    "ourEnglishFilter":{
                        "type":"kstem"
                    }
                }
            }
        }
    }
}

定义一个名为en的分析器。每个分析器都由一个分析器和多个过滤器构成,这样在定义映射时可以应用en这个分析器

使用这个分析器对“robots cars”分析

GET http://localhost:9200/posts/_analyze?pretty&field=post.name -d 'robots cars'