ES搜索引擎增删改查操作

目录

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": {
    
     }
  }
}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注