ES知识总结:
1、索引操作:
(1)创建索引:语法是PUT indexName(随便)
(2)删除索引:DELETE indexName(要删除对应索引库库名)
感想:不怎么难,挺简单
2、数据操作:
(1)添加数据语法:POST indexName(要添加数据的索引库名)/ doc / ID(指定数据ID)
扩展字段:stock(INT类型,库存),saleable(布尔类型,是否上架)
(2)修改数据语法:PUT indexName(索引库名) / doc / ID(要修改的数据ID)
(3)删除数据:DELETE indexName / doc / ID(要删除对应数据的ID)
3、查询操作:
(1)小技巧:
HEAD indexName,查看当前索引是否存在。
GET _search 查看所有索引库
(2)匹配查询:
匹配所有
get indexName/_search
{
"query":{
"match_all": {}
}
}
匹配查询(指定字段条件查询)
get indexName/_search
{
"query":{
"match": {
(字段名)"title":"手机"
可添加扩展字段:
"minimum_should_match": "75%"来控制查询的匹配度
}
}
}
多字段匹配:
get indexName/_search
{
"query":{
"multi_match": {
"query": "小米200",
"fields": ["title"]
}
}
}
(3)查看索引解构信息以及当前索引所包含信息:
GET indexName(查看当前索引库的解构信息)
GET indexName / _search(查看当前索引库下所有的数据信息)
(4)布尔查询:
模糊查询:
get indexName / _search
{
"query": {
"bool": {
"must" : [
match注释:必须带此条件的模糊查询,查询的字段必须拥有“小米”
{ "match" : {
"title" : "小米"
}
}
],
must_not 为不能带此条件查询
"must_not" : [
{ "match" : {
"title" : "手机"
}
}
],
should为可查询出此字段的数据,没有也不影响
"should" : [
{"match" : {
"title" : "电视"
}}
]
}
}
}
(2)过滤查询
与同时查询range 和 title 的区别是:filter会在保有range的price区间查询的同时,不影响我们要查的主词条的分值。这里我们要查的主词条是小米手机,如果是同时查询,则分值结果会是同时符合价格和小米手机这个词条的结果分值最高。但如果用filter拦截range查询price的话,则相当于只查询了title的小米手机这个词条的结果和分值,但同时也查询了价格区间,只是这个条件不影响只查询主词条的分值。
GET indexName/_search
{
"query": {
"bool": {
"must": [
{"match": {
"title": "小米手机"
}}
],
"filter": {
"range": {
"price": {
"gte": 2500
}
}
}
}
}
}
#不计算分值过滤查询
GET indexName/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"price": {
"gte": 2500
}
}
}
}
}
}