elasticsearch之mappings的其他设置(indexcopy_to对象属性settings)

千磨万击还坚劲,任尔东西南北风。这篇文章主要讲述elasticsearch之mappings的其他设置:indexcopy_to对象属性settings相关的知识,希望能为你提供帮助。
前言上一小节中,根据dynamic的状态不同,我们对字段有了更多可自定义的操作。现在再来补充一个参数,使自定义的属性更加的灵活。
 
index首先来创建一个mappings:

PUT m4 { "mappings": { "doc": { "dynamic": false, "properties": { "name": { "type": "text", "index": true }, "age": { "type": "long", "index": false } } } } }

 
我们在创建索引的时候,为每个属性添加一个index参数
先来添加一篇文档
PUT m4/doc/1 { "name": "小黑", "age": 18 }

再来查询看效果
GET m4/doc/_search { "query": { "match": { "name": "小黑" } } }GET m4/doc/_search { "query": { "match": { "age": 18 } } }

name查询没问题,但是,以age作为查询条件就有问题了
{ "error": { "root_cause": [ { "type": "query_shard_exception", "reason": "failed to create query: { "match" : { "age" : { "query" : 18, "operator" : "OR", "prefix_length" : 0, "max_expansions" : 50, "fuzzy_transpositions" : true, "lenient" : false, "zero_terms_query" : "NONE", "auto_generate_synonyms_phrase_query" : true, "boost" : 1.0 } } }", "index_uuid": "GHBPeT5pRnSi3g6DkpIkow", "index": "m4" } ], "type": "search_phase_execution_exception", "reason": "all shards failed", "phase": "query", "grouped": true, "failed_shards": [ { "shard": 0, "index": "m4", "node": "dhkqLLTsRemm7qEgRdpvTg", "reason": { "type": "query_shard_exception", "reason": "failed to create query: { "match" : { "age" : { "query" : 18, "operator" : "OR", "prefix_length" : 0, "max_expansions" : 50, "fuzzy_transpositions" : true, "lenient" : false, "zero_terms_query" : "NONE", "auto_generate_synonyms_phrase_query" : true, "boost" : 1.0 } } }", "index_uuid": "GHBPeT5pRnSi3g6DkpIkow", "index": "m4", "caused_by": { "type": "illegal_argument_exception", "reason": "Cannot search on field [age] since it is not indexed." } } } ] }, "status": 400 }

 
返回的是报错结果,这其中就是index参数在起作用。
小结:index属性默认为true,如果该属性设置为false,那么,elasticsearch不会为该属性创建索引,也就是说无法当做主查询条件。
 
copy_to再来学习一个copy_to属性,该属性允许我们将多个字段的值复制到组字段中,然后将组字段作为单个字段进行查询。
PUT m5 { "mappings": { "doc": { "dynamic":false, "properties": { "first_name":{ "type": "text", "copy_to": "full_name" }, "last_name": { "type": "text", "copy_to": "full_name" }, "full_name": { "type": "text" } } } } }PUT m5/doc/1 { "first_name":"tom", "last_name":"ben" } PUT m5/doc/2 { "first_name":"john", "last_name":"smith" }GET m5/doc/_search { "query": { "match": { "first_name": "tom" } } }GET m5/doc/_search { "query": { "match": { "full_name": "tom" } } }

 
我们将first_namelast_name都复制到full_name中。并且使用full_name查询也返回了结果
{ "took" : 0, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.2876821, "hits" : [ { "_index" : "m5", "_type" : "doc", "_id" : "1", "_score" : 0.2876821, "_source" : { "first_name" : "tom", "last_name" : "ben" } } ] } }

返回结果表示查询成功。那么想要查询tom或者smith该怎么办?
GET m5/doc/_search { "query": { "match": { "full_name": { "query": "tom smith", "operator": "or" } } } }

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
【elasticsearch之mappings的其他设置(indexcopy_to对象属性settings)】 

    推荐阅读