Elasticsearch之基本API操作

Elasticsearch之基本API操作
索引操作

创建索引:使用PUT请求,http://localhost:9200/ + 索引名称

创建索引的映射:PUT, http://localhost:9200/+索引名称+/_mapping

{
    "properties": {
        "name":{
        	"type": "text",
        	"index": true
        },
        "sex":{
        	"type": "keyword",
        	"index": true
        },
        "tel":{
        	"type": "keyword",
        	"index": false
        }
    }
}
// mapping映射属性
type:字段数据类型,常见的简单类型有:
    字符串:text(可分词的文本)、keyword(精确值,如:品牌、国家、IP地址)
    数值:long、integer、shortbytedoublefloat
    布尔:boolean
    日期:date
    对象:object
index:是否创建索引,默认是true
analyzer:分词器,使用何种分词器
properties:该字段的子字段
ES中支持的两种地理坐标数据类型:
    geo_point:由维度(latitude)和经度(longitude)确定的一个点。如:"32.8752345,120.2981576"
    geo_shape:由多个geo_point组成的复杂几何图形。如一条直线。

查询映射:GET, http://localhost:9200/+索引名称+/_mapping

删除索引:使用DELETE请求,http://localhost:9200/ + 索引名称

获取索引:使用GET请求,http://localhost:9200/ + 索引名称

获取所有索引:使用GET请求,http://localhost:9200/_cat/indices?v

索引映射创建后不允许修改,但允许添加新字段的索引映射

数据操作

上传数据:使用POST请求,http://localhost:9200/ + 索引名称 + /_doc (+/3 指定数据的id,不加则使用默认生成的id),此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT

删除数据:使用delete请求,http://localhost:9200/+ 索引名称 +/_doc/+ 数据的id

获取单条数据:使用GET请求,http://localhost:9200/+ 索引名称 +/_doc/+ 数据的id

获取索引下的所有数据:使用GET请求,http://localhost:9200/+ 索引名称 +/_search

修改数据:若要修改所有数据,跟上传数据一样,会自动覆盖之前的数据;若只修改部分数据,使用POST请求,http://localhost:9200/ + 索引名称 + /_update/+ id 文件格式为:

{
	"doc": {
		"键名":"值",
		"键名":"值"
	}
}

带参查询:URL带参,GET请求,http://localhost:9200/+索引名称+/_search/q=键名:值

请求体带参,GET请求,http://localhost:9200/+索引名称+/_search,附带JSON请求体:

查找符合条件的数据:
{
	"query":{
		"match":{
			"title":"一测"
		}
	}
}
全查:
{
	"query":{
		"match_all":{}
	}
}
查询指定字段:
{
	"query":{
		"match_all":{}
	},
	"_source":["键名"]
}
分页查询:
{
	"query":{
		"match_all":{}
	},
	"from":0,
	"size":2
}
排序查询:
{
	"query":{
		"match_all":{}
	},
	"sort":{
		"键名":{
			"order":"desc"//降序(asc升序)
		}
	}
}
多条件查询:
{
	"query":{
		"bool":{
			"must":[{
				"match":{
					"title":"一"
				}
			},{
				"match":{
					"id":9
				}
			}]
		}
	}
}
范围查询:
{
	"query":{
		"bool":{
			"should":[{
				"match":{
					"content":"它"
				}
			},{
				"match":{
					"title":"一"
				}
			}],
            "filter":{
            	"range":{
                	"id":{
                    	"gt":20//大于
                	}
	            }
    	    }
		}
	}
}
完全匹配:
{
	"query":{
		"match_phrase":{
			"title" : "一"
		}
	}
}
高亮查询:
{
	"query":{
		"match_phrase":{
			"title" : "一"
		}
	},
    "highlight":{
        "fields":{
            "title":{}//<----高亮这字段
        }
    }
}
聚合查询:
{
	"aggs":{//聚合操作
		"price_group":{//名称,随意起名
			"terms":{//分组
				"field":"price"//分组字段
			}
		}
	}"size":0//不附带原始结果
}
对某一字段求平均值:
{
	"aggs":{
		"price_avg":{//名称,随意起名
			"avg":{//求平均
				"field":"price"
			}
		}
	},
    "size":0
}

elasticsearch中的相关性打分算法

  • TF-IDF:在elasticsearch5.0之前使用,会随着词频增加而越来越大
  • BM25:在elasticsearch5.0之后使用,会随着词频增加而增大,但增长曲线会趋于水平

Function Score Query

使用Function Score Query可以修改文档的相关性算分(query score),根据新得到的算分排序。

在这里插入图片描述

Function Score Query定义的三要素是什么?

  • 过滤条件:哪些文档要加分
  • 算分函数:如何计算function score
  • 加权方式:function score与query score如何运算

复合查询Boolean Query

布尔查询是一个或多个查询子句的组合,子查询的组合方式有:

  • must:必须匹配每个子查询,类似 与
  • should:选择性匹配子查询,类似 或
  • must_not:必须不匹配,不参与算分,类似 非
  • filter:必须匹配,不参与算分

自定义分词器

elasticsearch中分词器(analyzer)的组成包含三部分:

  • character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
  • tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart
  • tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等

为了避免搜索时搜到同音字,应在创建索引时使用拼音分词器,但搜索时不应使用拼音分词器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值