目录
ES查询操作
match查询
ES索引操作
创建索引
ES添加修改操作
添加操作
修改操作
ES删除操作
删除索引
删除document
es概述:Es搜索引擎概述和语句案例_派大猩9527的博客-CSDN博客
ES查询操作
精确查找(全词匹配)
term查询不会对查询语句进行分词,而是精确的去匹配结构化数据中的字段值。
GET /索引名/_search
{
"query": {
"term": {
"id": 67
}
}
}
精确查找多个值(全词匹配)
GET /索引名/_search
{
"query": {
"terms": {
"id": [
67,
68
]
}
}
}
范围查询 range
GET /索引名/_search
{
"query": {
"range": {
"last_loading_time": {
"gte": "2022-02-15",
"lte": "2022-02-17"
}
}
}
}
geo_distance半径查询
GET /索引名/_search
{
"query": {
"geo_distance": {
"distance": "30km",
"索引字段名": {
"lon" : 120.126629,
"lat" : 31.799108
}
}
},#排序
"sort": [
{
"_geo_distance": {
"索引字段名": {
"lon" : 120.126629,
"lat" : 31.799108
},
"order": "asc",
"unit": "km"
}
}
]
}
match查询
match查询知道分词器的存在,会对field进行分词操作,然后再查询。
match_all (查询索引全部数据)
GET /索引名/_search
{
"query": {
"match_all": {}
}
}示例:
返回:
查询默认最大显示 一万条,如果要total.value显示当前索引的全部文档数需要加下列条件
"track_total_hits": true
示例:
返回显示:
match查询
举个例子,你可以使用 match
查询语句 来查询 tweet
字段中包含 elasticsearch
的 tweet,所有有关"elasticsearch
", 那么所有包含这个词中的一个或多个的文档就会被搜索出来。并且根据lucene的评分机制(TF/IDF)来进行评分。对Text类型字段,索引时会进行分词,大写字母会转成小写等,一般都用match搜索。
查询附带字段:
operator:匹配条件类型,有两个值,and:条件分词后都要匹配,or:条件分词后有一个匹配即可(默认)。
minmum_should_match:指定最小匹配的数量。
GET /索引名/_search
{
"query": {
"match": {
"tweet
": "elasticsearch
"
}
}
}
match查询多个字段
GET /bank/_search { "query": { "must": [{ "match": { "title": "Search" } }, { "match": { "content": "Elasticsearch" } }]} }
match_phrase查询
match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,但只保留包含了所有搜索词条的文档,并且词条的位置要邻接。
GET /索引名/_search
{
"query": {
"match_phrase": {
"name": {
"query": "lonely wolf"
}
}
}
}
要完全匹配“lonely wolf”的文档才会被搜索出来。这种比较严格,可以用slop来调节,slop值越大,搜索的顺序可以忽略不计。ElasticSearch中一般情况下如果不希望被分词可以使用match_phrase进行搜索。
multi_match查询
es中如果我们希望两个字段进行匹配,其中一个字段有这个文档就满足的话,使用multi_match。multi_match多匹配查询的类型有多种,其中的三种: best_fields 、 most_fields 和 cross_fields (最佳字段、多数字段、跨字段)。默认情况下,查询的类型是 best_fields 。
可设置参数:
tie_breaker:在0~1之间,是个小数,在于说,将其他query的分数,乘以tie_breaker,然后综合与最高分数的那个query的分数,综合在一起进行计算,除了取最高分以外,还会考虑其他的query的分数。
minimum_should_match:最小匹配度,表示如果可选子句的数量等于(或小于)设置的值,则它们都是必需的,但如果它大于设置的值,则适用规范。
GET /索引名/_search
{
"query": {
"multi_match": {
"query": "无锡正天",
"fields": ["logisticsLineCompanyName","logisticsLineAddress"],
"type": "best_fields",
"tie_breaker": 0,
"minimum_should_match":1
}
}
}
ES索引操作
创建索引
创建一个不带mapping的索引
PUT /索引名
创建索引设置索引及分片
PUT /索引名
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
}
}
修改索引setting副本数(number_of_shards 分片数量不可修改)
PUT /索引名/_settings {
"number_of_replicas": 2
}
创建带有静态映射类型的索引
PUT 索引名
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 2
},
"mappings": {
"crawl_article": {
"_all": {
"enabled": false
},
"properties": {
"summary": {
"search_analyzer": "ik_smart",
"similarity": "BM25",
"analyzer": "ik_max_word",
"type": "text"
},
"title": {
"search_analyzer": "ik_smart",
"similarity": "BM25",
"analyzer": "ik_max_word",
"type": "text"
},
"content": {
"search_analyzer": "ik_smart",
"similarity": "BM25",
"analyzer": "ik_max_word",
"type": "text"
}
}
}
}
}
修改已创建的索引的mapping(如果mapping已有该字段则不能改变)
PUT 索引名/_mapping
{
"properties": {
"字段1": {
"type": "text", //字段类型
"fields":{
"keyword":{
"type":"keyword",
"ignore_above": 256
}
}
},字段2:{
"type": "text"
},
字段3:{
"type": "text","index":false //索引方式、是否分析
}
}
}示例:
返回结果
ES的文档字段可设置属性
boost
查询时提高字段的相关性算分,得分越高在查询结果集中排名越靠前,
boost
可以指定其分数(权重),默认 1.0。analyzer
字段分词器,默认为
standard
,可以指定第三方的分词器。dynamic
创建索引时,索引中字段是固定的,该属性可以决定是否允许新增字段,有三种状态A:
1)true:允许新增,es会为新的字段自动添加mapping类型。
2)false:允许新增,不会自动添加映射关系,但是不能作为主查询查询(查询不到具体的新增字段)。
3)strict:严格模式,不可以新增字段,新增就报错,需要重新设计索引。
ignore_above
超过ignore_above设置的字符串将不会被索引或存储,对于字符串数组,ignore_above将分别应用于每个数组元素,并且字符串元素,ignore_above将不会被索引或存储。
查询超过设置的数据
插入一条
查询
返回
fields
允许为字段设置子字段,可以有多个。
查看某个索引的映射结构
Get /索引名/_mapping
返回
查看某个字段的分词结果
GET /{index}/{type}/{id}/_termvectors?fields={fieldName}
返回(部分结果)
ES添加修改操作
添加操作
#不指定ID (ES会自动生成id)
POST /索引名/_doc/
{
"字段1":"yh",
"字段2":24………
}#指定id
POST /索引名/_doc/1(id)
{
"字段1":"yh2",
"字段2":24
}
修改操作
1)会覆盖当前id的数据
PUT /索引名/_doc/1(指定id)
{
"字段1":"修改值"
}2)修改部分字段
POST /index/_update/id
{
"doc":{
"age":22
}
}
ES删除操作
删除索引
删除指定索引
DELETE /索引名
删除document
单条document根据id删除
DELETE /索引名/_doc/ID
根据条件删除
POST 索引名/_delete_by_query
{
"query": {
"match_all": {
}
}
}