PUT /website/blog/

{

  "title" : "elasticsearchshi是是什么",

  "author" : "zhangsan",

  "titleScore" : 66.666

}

在检索出数据之后,我们观察有一个_source这样的字段,

【注意】_source字段在我们检索时非常重要;

Es除了将数据保存在倒排索引中,另外还有一分原始文档

原始文档就是存储在_source中的;

其实我们在elasticsearch中搜索文档,查看文档的内容就是_source中的内容

我们可以在设置mapping的过程中将source字段开启或者关闭:

PUT weisite
{
 "mappings":{  
        "article":{  
          "_source": {"enabled": true},  
            "properties":{  
                "id":{"type": "text", "store": true },  
                "title":{"type": "text","store": true},
                "readCounts":{"type": "integer","store": true},  
                "times": {"type": "date", "index": "false"}
            }  
        }  
  }  
}

那么source字段有什么作用

ID _source 倒排索引 ID 原始文档
1 {‘我爱中国’} 我爱[1,2,3] 中国[1] 1 我爱中国
2 {‘我爱游戏’} 游戏[2] 2 我爱游戏
3 {‘我爱游戏’} 爱[1,2,3] 3 我啥都爱

1、如果我们关闭source字段,也就是enable:false,那么在检索过程中会根据关键字比如”游戏”去倒排索引【记录了词项和文档之间的对应关系】中查询文档的ID,但是source字段的enable:false,那么原始文档中没有这些内容,就只能回显文档的ID,字段内容是找不到的

2、如果我们开启source字段,也就是enable:true,那么在检索过程过程中,客户端只需要解析存储的source JSON串,不要通过倒排索引表去检索,仅需要一次IO,就可以返回整个文档的结果

【注意】:

source字段默认是存储的, 什么情况下不用保留source字段?如果某个字段内容非常多,业务里面只需要能对该字段进行搜索,最后返回文档id,查看文档内容会再次到mysql或者hbase中取数据

把大字段的内容存在Elasticsearch中只会增大索引,这一点文档数量越大结果越明显,如果一条文档节省几KB,放大到亿万级的量结果也是非常可观的。

如果想要关闭_source字段,在mapping中的设置如下:

PUT weisite
{
 "mappings":{  
        "article":{  
          "_source": {"enabled": false},  
            "properties":{  
                "id":{"type": "text", "store": true },  
                "title":{"type": "text","store": true},
                "readCounts":{"type": "integer","store": true},  
                "times": {"type": "date", "index": "false"}
            }  
        }  
  }  
}
GET /weisite/article/1
GET /weisite/article/_search
{
   "query": {
       "match_phrase": {
           "title": "this"
      }
  }
}

如果只想存储几个字段的原始值,那么在_source属性下还有两个字段:include和exclude:

PUT weisite
{
 "mappings":{  
        "article":{  
          "_source": {
            "includes": [
               "title"
            ],
            "excludes": [
               "content"
            ]
          },  
            "properties":{  
                "id":{"type": "text", "store": true },  
                "title":{"type": "text","store": true},
                "readCounts":{"type": "integer","store": true},  
                "times": {"type": "date", "index": true},
                "content" : {"type" : "text" , "index": true}
            }  
        }  
  }  
}

还有一个store属性:

Store**属性为true的时候会将指定的字段写入索引**(然后查询的时候使用倒排索引去查询,相比_source多一次IO),默认是false的;

其次是,如果想让检索出的字段进行高亮显示,那么(store和source要至少保留一个)

 

最新文章

  1. ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results
  2. 《CoffeeScript应用开发》学习:第二章 编写第一个CoffeeScript应用程序
  3. atitit.js浏览器环境下的全局异常捕获
  4. VQuery高级特性
  5. microstrip(微带线)、stripline(带状线) 指什么?
  6. Struts2:标签库
  7. [moka摘录]查看邮件是否已被阅读
  8. Extjs中TextField中显示图标
  9. 制作炫酷banner js插件,revolution
  10. Base64原理简介
  11. ExtJS简单的动画效果2(ext js淡入淡出特效)
  12. JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别
  13. oracle 计算两个时间之间的月份差,相差几个星期,相差多少天
  14. java中dao层的通用层,通过反射机制,操作数据库的增删改,适用的范围是不包含属性类
  15. eclipse自动提示功能没了的解决方法
  16. bzoj 4830: [Hnoi2017]抛硬币
  17. CentOS7下Django环境的搭建安装python3.6.5,virtualenv django1.11.14
  18. composer命令中 --prefer-dist 和 --prefer-source 的区别
  19. 根据xml配置使用反射动态生成对象
  20. openshift node资源限制

热门文章

  1. BusyBox TFTP使用(转)
  2. 获取kafka最新offset-scala
  3. Java数据结构之栈(Stack)
  4. 深入IO 想学必看!受益匪浅哦~
  5. java代码转化为jar包,再转化为.exe文件步骤
  6. HDU1688-POJ3463-Sightseeing(求次短路的条数)
  7. 解决PKIX path building failed的问题
  8. js中的生成器函数
  9. hashlib模块和logging模块
  10. python基础操作---list