日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch5.x实践_day05_03_Mapping_Meta-Fields

發(fā)布時間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch5.x实践_day05_03_Mapping_Meta-Fields 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

二、Meta-Fields(元數(shù)據(jù))

2.1 _all

_all字段是把其它字段拼接在一起的超級字段,所有的字段用空格分開,_all字段會被解析和索引,但是不存儲。當你只想返回包含某個關鍵字的文檔但是不明確地搜某個字段的時候就需要使用_all字段。
例子:

GET http://192.168.20.46:9200/my_index/blog/1 {"title": "Master Java","content": "learn java","author": "Tom" }

_all字段包含:[ “Master”, “Java”, “l(fā)earn”, “Tom” ]? 搜索:

POST http://192.168.20.46:9200/my_index/_search?pretty {"query": {"match": {"_all": "Java"}} }

使用copy_to自定義_all字段:

PUT http://192.168.20.46:9200/my_index {"mappings": {"mytype": {"properties": {"title": {"type": "text","copy_to": "full_content" },"content": {"type": "text","copy_to": "full_content" },"full_content": {"type": "text"}}}} } POST http://192.168.20.46:9200/my_index/mytype/1 {"title": "Master Java","content": "learn Java" } POST http://192.168.20.46:9200/my_index/_search?pretty {"query": {"match": {"full_content": "java"}} }

2.2 _field_names

_field_names字段用來存儲文檔中的所有非空字段的名字,這個字段常用于exists查詢。例子如下:

terms查詢

POST http://192.168.20.46:9200/my_index/my_type/1 {"title": "This is a document" } POST http://192.168.20.46:9200/my_index/my_type/2 {"title": "This is another document","body": "This document has a body" }POST http://192.168.20.46:9200/my_index/_search {"query": {"terms": {"_field_names": [ "body" ] }} }

結果會返回第二條文檔,因為第一條文檔沒有title字段。
同樣,可以使用exists查詢

POST http://192.168.20.46:9200/my_index/_search {"query": {"exists" : { "field" : "body" }} }

2.3 _id

每條被索引的文檔都有一個_type和_id字段,_id可以用于term查詢、temrs查詢、match查詢、query_string查詢、simple_query_string查詢,但是不能用于聚合、腳本和排序。例子如下:

POST http://192.168.20.46:9200/my_index/my_type/1 {"text": "Document with ID 1" }POST http://192.168.20.46:9200/my_index/my_type/2 {"text": "Document with ID 2" }POST http://192.168.20.46:9200/my_index/_search {"query": {"terms": {"_id": [ "1", "2" ] }} }

2.4 _index

多索引查詢時,有時候只需要在特地索引名上進行查詢,_index字段提供了便利,也就是說可以對索引名進行term查詢、terms查詢、聚合分析、使用腳本和排序。

_index是一個虛擬字段,不會真的加到Lucene索引中,對_index進行term、terms查詢(也包括match、query_string、simple_query_string),但是不支持prefix、wildcard、regexp和fuzzy查詢。

舉例,2個索引2條文檔

http://192.168.20.46:9200/index_1/my_type/1 {"text": "Document in index 1" }http://192.168.20.46:9200/index_2/my_type/2 {"text": "Document in index 2" }POST http://192.168.20.46:9200/index_1,index_2/_search {"query": {"terms": {"_index": ["index_1", "index_2"] }},"aggs": {"indices": {"terms": {"field": "_index", "size": 10}}},"sort": [{"_index": { "order": "asc"}}],"script_fields": {"index_name": {"script": {"lang": "painless","inline": "doc['_index']" }}} } {"took": 1210,"timed_out": false,"_shards": {"total": 10,"successful": 10,"failed": 0},"hits": {"total": 3,"max_score": null,"hits": [{"_index": "index_1","_type": "my_type","_id": "2","_score": null,"fields": {"index_name": ["index_1"]},"sort": ["index_1"]},{"_index": "index_1","_type": "my_type","_id": "1","_score": null,"fields": {"index_name": ["index_1"]},"sort": ["index_1"]},{"_index": "index_2","_type": "my_type","_id": "2","_score": null,"fields": {"index_name": ["index_2"]},"sort": ["index_2"]}]},"aggregations": {"indices": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "index_1","doc_count": 2},{"key": "index_2","doc_count": 1}]}} }

?

2.5 _parent

_parent用于指定同一索引中文檔的父子關系。下面例子中現(xiàn)在mapping中指定文檔的父子關系,然后索引父文檔,索引子文檔時指定父id,最后根據(jù)子文檔查詢父文檔。

POST http://192.168.20.46:9200/my_index {"mappings":{"my_parent":{},"my_child":{"_parent":{"type":{"type":"my_parent"}}}} } POST http://192.168.20.46:9200/my_index/my_parent/1 {"text": "This is a parent document" }POST http://192.168.20.46:9200/my_index/my_child/2?parent=1 {"text": "This is a child document" }POST http://192.168.20.46:9200/my_index/my_child/3?parent=1&refresh=true {"text": "This is another child document" } POST http://192.168.20.46:9200/my_index/my_parent/_search {"query": {"has_child": { "type": "my_child","query": {"match": {"text": "child document"}}}} }

?

2.6 _routing

路由參數(shù),ELasticsearch通過以下公式計算文檔應該分到哪個分片上:

shard_num = hash(_routing) % num_primary_shards

默認的_routing值是文檔的_id或者_parent,通過_routing參數(shù)可以設置自定義路由。例如,想把user1發(fā)布的博客存儲到同一個分片上,索引時指定routing參數(shù),查詢時在指定路由上查詢:

POST http://192.168.20.46:9200/my_index/my_type/1?routing=user1&refresh=true {"title": "This is a document" } GET http://192.168.20.46:9200/my_index/my_type/1?routing=user1 ==> {"_index": "my_index","_type": "my_type","_id": "1","_version": 2,"_routing": "user1","found": true,"_source": {"title": "This is a document"} } POST http://192.168.20.46:9200/my_index/_search {"query": {"terms": {"_routing": [ "user1" ] }} }==> {"took": 33,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 1,"max_score": 0.2876821,"hits": [{"_index": "my_index","_type": "my_type","_id": "1","_score": 0.2876821,"_routing": "user1","_source": {"title": "This is a document"}}]} } POST http://192.168.20.46:9200/my_index/_search?routing=user1,user2 {"query": {"match": {"title": "document"}} }

在Mapping中指定routing為必須的:

PUT http://192.168.20.46:9200/my_index2 {"mappings": {"my_type": {"_routing": {"required": true }}} } POST http://192.168.20.46:9200/my_index2/my_type/1 {"text": "No routing value provided routing_missing_exception" }

2.7 _source

存儲的文檔的原始值。默認_source字段是開啟的,也可以關閉:

POST http://192.168.20.46:9200/tweets {"mappings": {"tweet": {"_source": {"enabled": false}}} }

但是一般情況下不要關閉,除法你不想做一些操作:

  • 使用update、update_by_query、reindex
  • 使用高亮
  • 數(shù)據(jù)備份、改變mapping、升級索引
  • 通過原始字段debug查詢或者聚合

2.8 _type

每條被索引的文檔都有一個_type和_id字段,可以根據(jù)_type進行查詢、聚合、腳本和排序。例子如下:

POST http://192.168.20.46:9200/my_index/type_1/1 {"text": "Document with type 1" } POST http://192.168.20.46:9200/my_index/type_2/2?refresh=true {"text": "Document with type 2" }POST http://192.168.20.46:9200/my_index/_search {"query": {"terms": {"_type": [ "type_1", "type_2" ] }},"aggs": {"types": {"terms": {"field": "_type", "size": 10}}},"sort": [{"_type": { "order": "desc"}}],"script_fields": {"type": {"script": {"lang": "painless","inline": "doc['_type']" }}} }

2.9 _uid

_uid和_type和_index的組合。和_type一樣,可用于查詢、聚合、腳本和排序。例子如下:

POST http://192.168.20.46:9200/my_index/my_type/1 {"text": "Document with ID 1" } POST http://192.168.20.46:9200/my_index/my_type/2?refresh=true {"text": "Document with ID 2" }POST http://192.168.20.46:9200/my_index/_search {"query": {"terms": {"_uid": [ "my_type#1", "my_type#2" ] }},"aggs": {"UIDs": {"terms": {"field": "_uid", "size": 10}}},"sort": [{"_uid": { "order": "desc"}}],"script_fields": {"UID": {"script": {"lang": "painless","inline": "doc['_uid']" }}} }

?

?

?

轉載于:https://my.oschina.net/LucasZhu/blog/1491778

總結

以上是生活随笔為你收集整理的ElasticSearch5.x实践_day05_03_Mapping_Meta-Fields的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。