Metadata fields are used to customize how a document’s associated metadata is treated.
元数据字段用于自定义处理文档相关元数据
Identity metadata fields 身份元数据
_index
The index to which the document belongs. 文档所在索引库
_type
The document’s mapping type.
_id
The document’s ID. 文档唯一标识
注意 _index _id 可用于 query 查询
_index
查询,包括跨索引库查询,_bulk
查询,_mget
查询,_search
查询,_msearch
查询
PUT index_1/_doc/1
{
"text": "Document in index 1"
}
PUT index_2/_doc/2?refresh=true
{
"text": "Document in index 2"
}
GET 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",
"source": "doc['_index']"
}
}
}
}
_id
查询,包括跨索引库查询,_bulk
查询,_mget
查询,_search
查询,_msearch
查询
The value of the `_id` field is accessible in queries such as `term`, `terms`, `match`, and `query_string`
可用于 term,terms,match,query_string
# Example documents
PUT my-index-000001/_doc/1
{
"text": "Document with ID 1"
}
PUT my-index-000001/_doc/2?refresh=true
{
"text": "Document with ID 2"
}
GET my-index-000001/_search
{
"query": {
"terms": {
"_id": [ "1", "2" ]
}
}
}
不使用 _index 则会存在命中不同索引库的相同字段返回重复数据,在 bool 的 should 查询中加入 _index 可支持指定索引库 or 查询
# 跨索引搜索
GET public_dynamic_index_sc,user_publish_mood_index_sc/_search
{
"size":100,
"query":{
"bool":{
"should":[
{
"bool":{
"must":[
{
"term":{
"user_id":5
}
},
{
"term":{
"_index":"public_dynamic_index_sc"
}
},
{
"term":{
"del_flag":0
}
},
{
"terms":{
"verify_status":[0,2,3]
}
}
]
}
},
{
"bool":{
"must":[
{
"term":{
"user_id":5
}
},
{
"term":{
"del_flag":0
}
},
{
"term":{
"_index":"user_publish_mood_index_sc"
}
}
]
}
}
]
}
}
}
java 客户端
// 作品
BoolQueryBuilder dynamicMustQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("user_id", 5))
.must(QueryBuilders.termQuery("del_flag", 0))
.must(QueryBuilders.termsQuery("verify_status", new int[]{0,2,3}))
.must(QueryBuilders.termQuery("_index", DYNAMIC_INDEX));
// 心情
BoolQueryBuilder userMoodMustQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("user_id", 5))
.must(QueryBuilders.termQuery("del_flag", 0))
.must(QueryBuilders.termQuery("_index", MOOD_INDEX));
BoolQueryBuilder allShouldQueryBuilder = QueryBuilders.boolQuery()
.should(dynamicMustQueryBuilder)
.should(userMoodMustQueryBuilder);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
.query(allShouldQueryBuilder)
.size(100);
SearchRequest searchRequest = new SearchRequest(DYNAMIC_INDEX,MOOD_INDEX).source(searchSourceBuilder);