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": {
? ??
? ? ?}
? }
}
?
?
總結
以上是生活随笔為你收集整理的ES搜索引擎增删改查操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Educational Codeforc
- 下一篇: 倾斜摄影小范围精细建模方案