千磨万击还坚劲,任尔东西南北风。这篇文章主要讲述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)】
推荐阅读
- mapper @Select()注解开发,使用模板 if 和循环
- 在application.yml的自动提示中显示出项目内部的属性配置项
- ZUK Z2 AospExtended-v6.7 Android 9.0可用的谷歌相机Mod.md
- vs code 怎么与手机连接进行调试app项目
- Android多线程断点续传下载原理及实现
- 安卓开发Webview简单使用
- [ubuntu]android SDK 与Gradle环境的安装与配置
- selenium与appium怎样联系
- Android如何屏蔽home键和recent键