ES搜索引擎增删改查操作
目錄
ES查詢操作
match查詢
ES索引操作
創(chuàng)建索引
ES添加修改操作
添加操作
修改操作
ES刪除操作
刪除索引
刪除document
es概述:Es搜索引擎概述和語句案例_派大猩9527的博客-CSDN博客
ES查詢操作
精確查找(全詞匹配)?
term查詢不會(huì)對(duì)查詢語句進(jìn)行分詞,而是精確的去匹配結(jié)構(gòu)化數(shù)據(jù)中的字段值。
GET /索引名/_search
{
? "query": {
? ? "term": {
? ? ? ? ? "id": 67
? ? }
? }
}
精確查找多個(gè)值(全詞匹配)
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查詢知道分詞器的存在,會(huì)對(duì)field進(jìn)行分詞操作,然后再查詢。
match_all (查詢索引全部數(shù)據(jù))
GET /索引名/_search
{
? "query": {
? ? "match_all": {}
? }
}示例:
返回:
?
?查詢默認(rèn)最大顯示 一萬條,如果要total.value顯示當(dāng)前索引的全部文檔數(shù)需要加下列條件
"track_total_hits": true
示例:
返回顯示:
match查詢
舉個(gè)例子,你可以使用?match?查詢語句 來查詢?tweet?字段中包含?elasticsearch?的 tweet,所有有關(guān)"elasticsearch?", 那么所有包含這個(gè)詞中的一個(gè)或多個(gè)的文檔就會(huì)被搜索出來。并且根據(jù)lucene的評(píng)分機(jī)制(TF/IDF)來進(jìn)行評(píng)分。對(duì)Text類型字段,索引時(shí)會(huì)進(jìn)行分詞,大寫字母會(huì)轉(zhuǎn)成小寫等,一般都用match搜索。
查詢附帶字段:
operator:匹配條件類型,有兩個(gè)值,and:條件分詞后都要匹配,or:條件分詞后有一個(gè)匹配即可(默認(rèn))。
minmum_should_match:指定最小匹配的數(shù)量。
GET /索引名/_search
{
? "query": {
? ? "match": {
? ? ? ? "tweet": "elasticsearch?"
? ? }
? }
}
match查詢多個(gè)字段
GET /bank/_search
{ "query": { "must": [{ "match": { "title": "Search" } }, { "match": { "content": "Elasticsearch" } }]}
}
match_phrase查詢
match_phrase查詢首先解析查詢字符串來產(chǎn)生一個(gè)詞條列表。然后會(huì)搜索所有的詞條,但只保留包含了所有搜索詞條的文檔,并且詞條的位置要鄰接。
GET /索引名/_search
{
? "query": {
? ? "match_phrase": {
? ? ? "name": {
? ? ? ? "query": "lonely wolf"
? ? ? }
? ? }
? }
}
要完全匹配“l(fā)onely wolf”的文檔才會(huì)被搜索出來。這種比較嚴(yán)格,可以用slop來調(diào)節(jié),slop值越大,搜索的順序可以忽略不計(jì)。ElasticSearch中一般情況下如果不希望被分詞可以使用match_phrase進(jìn)行搜索。
multi_match查詢
es中如果我們希望兩個(gè)字段進(jìn)行匹配,其中一個(gè)字段有這個(gè)文檔就滿足的話,使用multi_match。multi_match多匹配查詢的類型有多種,其中的三種: best_fields 、 most_fields 和 cross_fields (最佳字段、多數(shù)字段、跨字段)。默認(rèn)情況下,查詢的類型是 best_fields?。
可設(shè)置參數(shù):
tie_breaker:在0~1之間,是個(gè)小數(shù),在于說,將其他query的分?jǐn)?shù),乘以tie_breaker,然后綜合與最高分?jǐn)?shù)的那個(gè)query的分?jǐn)?shù),綜合在一起進(jìn)行計(jì)算,除了取最高分以外,還會(huì)考慮其他的query的分?jǐn)?shù)。
minimum_should_match:最小匹配度,表示如果可選子句的數(shù)量等于(或小于)設(shè)置的值,則它們都是必需的,但如果它大于設(shè)置的值,則適用規(guī)范。
GET /索引名/_search
{
? "query": {
? ? ?"multi_match": {
? ? ?"query": "無錫正天",
? ? ?"fields": ["logisticsLineCompanyName","logisticsLineAddress"],
? ? ?"type": "best_fields",
? ? ?"tie_breaker": 0,
? ? ?"minimum_should_match":1
? ? }
? }
}
ES索引操作
創(chuàng)建索引
創(chuàng)建一個(gè)不帶mapping的索引
PUT /索引名
創(chuàng)建索引設(shè)置索引及分片
PUT /索引名
{
? "settings": {
? ? "number_of_shards": 3,
? ? "number_of_replicas": 0
? }
}
修改索引setting副本數(shù)(number_of_shards 分片數(shù)量不可修改)
PUT /索引名/_settings {
"number_of_replicas": 2
}
創(chuàng)建帶有靜態(tài)映射類型的索引
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"
? ? ? ? }
? ? ? }
? ? }
? }
}
修改已創(chuàng)建的索引的mapping(如果mapping已有該字段則不能改變)
PUT 索引名/_mapping?
{
? "properties": {
? ? "字段1": {
? ? ? "type": "text",? ? ?//字段類型
? ? ? "fields":{
? ? ? ? "keyword":{
? ? ? ? ? "type":"keyword",
? ? ? ? ? "ignore_above": 256
? ? ? ? }
? ? ? }
? ? },? ? 字段2:{
? ? ? "type": "text"
? ? },
? ? 字段3:{
? ? ? ?"type": "text",? ? ? ?"index":false //索引方式、是否分析
? ? }
? }
}示例:
?
?
返回結(jié)果
?
ES的文檔字段可設(shè)置屬性
boost
查詢時(shí)提高字段的相關(guān)性算分,得分越高在查詢結(jié)果集中排名越靠前,
boost?可以指定其分?jǐn)?shù)(權(quán)重),默認(rèn) 1.0。analyzer
字段分詞器,默認(rèn)為?
standard,可以指定第三方的分詞器。dynamic
創(chuàng)建索引時(shí),索引中字段是固定的,該屬性可以決定是否允許新增字段,有三種狀態(tài)A:
1)true:允許新增,es會(huì)為新的字段自動(dòng)添加mapping類型。
2)false:允許新增,不會(huì)自動(dòng)添加映射關(guān)系,但是不能作為主查詢查詢(查詢不到具體的新增字段)。
3)strict:嚴(yán)格模式,不可以新增字段,新增就報(bào)錯(cuò),需要重新設(shè)計(jì)索引。
ignore_above
超過ignore_above設(shè)置的字符串將不會(huì)被索引或存儲(chǔ),對(duì)于字符串?dāng)?shù)組,ignore_above將分別應(yīng)用于每個(gè)數(shù)組元素,并且字符串元素,ignore_above將不會(huì)被索引或存儲(chǔ)。
查詢超過設(shè)置的數(shù)據(jù)
插入一條
?
?
查詢
??
返回
?
?fields
允許為字段設(shè)置子字段,可以有多個(gè)。
?
查看某個(gè)索引的映射結(jié)構(gòu)
Get? ?/索引名/_mapping
?
返回
?
查看某個(gè)字段的分詞結(jié)果
GET /{index}/{type}/{id}/_termvectors?fields={fieldName}?
?
返回(部分結(jié)果)
??
ES添加修改操作
添加操作
#不指定ID (ES會(huì)自動(dòng)生成id)
POST /索引名/_doc/
{
? "字段1":"yh",
? "字段2":24??? ?.........
}#指定id
POST /索引名/_doc/1(id)
{
? "字段1":"yh2",
? "字段2":24
}
修改操作
1)會(huì)覆蓋當(dāng)前id的數(shù)據(jù)
PUT /索引名/_doc/1(指定id)
{
? "字段1":"修改值"
}2)修改部分字段
POST /index/_update/id
{
? "doc":{
? ? "age":22
? }
}?
??
ES刪除操作
刪除索引
刪除指定索引
DELETE /索引名
刪除document
單條document根據(jù)id刪除
DELETE /索引名/_doc/ID
根據(jù)條件刪除
POST 索引名/_delete_by_query
{
? "query": {
? ? "match_all": {
? ??
? ? ?}
? }
}
?
?
總結(jié)
以上是生活随笔為你收集整理的ES搜索引擎增删改查操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Educational Codeforc
- 下一篇: 倾斜摄影小范围精细建模方案