映射的分类:
(1)动态映射:
当ES在文档中碰到一个以前没见过的字段时,它会利用动态映射来决定该字段的类型,并自动地对该字段添加映射。
可以通过dynamic设置来控制这一行为,它能够接受以下的选项:
true:默认值。动态添加字段
false:忽略新字段
strict:如果碰到陌生字段,抛出异常
dynamic设置可以适用在根对象上或者object类型的任意字段上。
POST /lib2
#给索引lib2创建映射类型
{
"settings":{
"number_of_shards" : 3,
"number_of_replicas" : 0
},
"mappings":{
"books":{
"properties":{
"title":{"type":"text"},
"name":{"type":"text","index":false},
"publish_date":{"type":"date","index":false},
"price":{"type":"double"},
"number":{"type":"integer"}
}
}
}
}
POST /lib2
#给索引lib2创建映射类型 {
"settings":{
"number_of_shards" : 3,
"number_of_replicas" : 0
},
"mappings":{
"books":{
"properties":{
"title":{"type":"text"},
"name":{"type":"text","index":false},
"publish_date":{"type":"date","index":false},
"price":{"type":"double"},
"number":{
"type":"object",
"dynamic":true
}
}
}
}
}
2.7基本查询(Query查询)
2.7.1数据准备
PUT /lib3 { "settings":{ "number_of_shards" : 3, "number_of_replicas" : 0 }, "mappings":{ "user":{ "properties":{ "name": {"type":"text"}, "address": {"type":"text"}, "age": {"type":"integer"}, "interests": {"type":"text"}, "birthday": {"type":"date"} } } } }
GET /lib3/user/_search?q=name:lisi
GET /lib3/user/_search?q=name:zhaoliu&sort=age:desc
2.7.2 term查询和terms查询
term query会去倒排索引中寻找确切的term,它并不知道分词器的存在。这种查询适合keyword 、numeric、date。
term:查询某个字段里含有某个关键词的文档
GET /lib3/user/_search/ { "query": { "term": {"interests": "changge"} } }
terms:查询某个字段里含有多个关键词的文档
GET /lib3/user/_search { "query":{ "terms":{ "interests": ["hejiu","changge"] } } }
2.7.3 控制查询返回的数量
from:从哪一个文档开始 size:需要的个数
GET /lib3/user/_search { "from":0, "size":2, "query":{ "terms":{ "interests": ["hejiu","changge"] } } }
2.7.4 返回版本号
GET /lib3/user/_search { "version":true, "query":{ "terms":{ "interests": ["hejiu","changge"] } } }
2.7.5 match查询
match query知道分词器的存在,会对filed进行分词操作,然后再查询
GET /lib3/user/_search { "query":{ "match":{ "name": "zhaoliu" } } }
GET /lib3/user/_search { "query":{ "match":{ "age": 20 } } }
match_all:查询所有文档
GET /lib3/user/_search { "query": { "match_all": {} } }
multi_match:可以指定多个字段
GET /lib3/user/_search { "query":{ "multi_match": { "query": "lvyou", "fields": ["interests","name"] } } }
match_phrase:短语匹配查询
ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变:
GET lib3/user/_search
{
"query":{
"match_phrase":{
"interests": "duanlian,shuoxiangsheng"
}
}
}