首先,大家要调整一下概念,对应于普通的关系型数据库,你可以暂时这样考虑
Relational DB | Elasticsearch |
Databases | Indexes |
Tables | Types |
Rows | Documents |
Columns | Fields |
1、创建索引myindex
curl -XPUT http://localhost:9200/myindex
2、创建类型user
curl -XPOST http://localhost:9200/myindex/user/_mapping -d' { "user": { "_all": { "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "term_vector": "no", "store": "false" }, "properties": { "用户ID": { "type": "string", "store": "no", "analyzer": "keyword", "search_analyzer": "keyword", "include_in_all": "true", "boost": 8 }, "姓名": { "type": "string", "store": "no", "term_vector": "with_positions_offsets", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "include_in_all": "true", "boost": 8 }, "性别": { "type": "string", "store": "no", "analyzer": "keyword", "search_analyzer": "keyword", "include_in_all": "true", "boost": 8 }, "年龄": { "type": "integer", "store": "no", "index": "not_analyzed", "include_in_all": "true", "boost": 8 }, "家庭住址": { "type": "string", "store": "no", "term_vector": "with_positions_offsets", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "include_in_all": "true", "boost": 8 }, "注册时间": { "type": "date", "format": "yyy-MM-dd HH:mm:ss", "store": "no", "index": "not_analyzed", "include_in_all": "true", "boost": 8 } } } }'
在这里类型user中,有几种索引类型,
key | 类型 | 分词方式 |
用户ID | string | keyword |
姓名 | string | ik_max_word |
性别 | string | keyword |
年龄 | integer | not_analyzed |
家庭住址 | string | ik_max_word |
注册时间 | date | not_analyzed |
其中,
ik_max_word,指的是用ik分词,然后将分词结果作为term,需要分词检索的字段,需要这样处理
keyword,指的是,不要分词,而是把整个词作为term,ID及字典很适合这样做
not_analyzed,是不做分词处理,如数字、时间,没有必要
3、上传文档
curl -XPUT http://localhost:9200/myindex/user/u001 -d' { "用户ID": "u001", "姓名":"张三", "性别":"男", "年龄":"25", "家庭住址":"北京市崇文区天朝大街001号", "注册时间":"2015-01-01 08:30:00" }' curl -XPUT http://localhost:9200/myindex/user/u002 -d' { "用户ID": "u002", "姓名":"李四", "性别":"男", "年龄":"25", "家庭住址":"上海市闸北区魔都大街007号", "注册时间":"2015-02-01 08:30:00" }' curl -XPUT http://localhost:9200/myindex/user/u003 -d' { "用户ID": "u003", "姓名":"王五", "性别":"男", "年龄":"26", "家庭住址":"广州市花都区花城大街010号", "注册时间":"2015-03-01 08:30:00" }'
4、文档是否存在
#判断id为u003的文档是否存在 curl -XHEAD http://localhost:9200/myindex/user/u003
5、获取文档
#获取id为u003的文档 curl -XGET http://localhost:9200/myindex/user/u003 #获取id为u003的文档的姓名及性别字段 http://localhost:9200/myindex/user/u003?_source=姓名,性别
6、查询文档
#查询文档,默认返回前10个 curl -XGET http://localhost:9200/myindex/user/_search #用参数进行查询 #年龄等于25的记录 curl -XGET http://localhost:9200/myindex/user/_search?q=年龄:25 #姓名等于王五的记录 curl -XGET http://localhost:9200/myindex/user/_search?q=姓名:王五 #姓名等于王五及年龄等于25的记录 curl -XGET http://localhost:9200/myindex/user/_search?q=+姓名:王五+年龄:26 #查询年龄等于25的用户 curl -XGET http://localhost:9200/myindex/user/_search -d' { "query" : { "match" : { "年龄" : "25" } } }' #查询年龄大于25,男性用户 curl -XGET http://localhost:9200/myindex/user/_search -d' { "query": { "filtered": { "filter": { "range": { "年龄": { "gt": 25 } } }, "query": { "match": { "性别": "男" } } } } }' #查询家庭住址中,包含北京或上海的用户 curl -XGET http://localhost:9200/myindex/user/_search -d' { "query" : { "match" : { "家庭住址" : "北京 上海" } } }' #查询词组 curl -XGET http://localhost:9200/myindex/user/_search -d' { "query" : { "match_phrase" : { "家庭住址" : "北京 崇文" } } } #按年龄分组聚合,并count curl -XGET http://localhost:9200/myindex/user/_search -d' { "aggs": { "all_interests": { "terms": { "field": "年龄" } } } } #男性患者,按年龄分组聚合,并count curl -XGET http://localhost:9200/myindex/user/_search -d' { "query": { "match": { "性别": "男" } }, "aggs": { "all_interests": { "terms": { "field": "年龄" } } } }