elasticsearch之mappings的其他设置:indexcopy_to对象属性settings
Posted 陌维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_name
和last_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的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch index 之 put mapping
ElasticSearch进阶篇之聚合(aggregations)和映射(mapping)
elasticsearch之mappings parameters