NEST - 返回部分文档
Selecting fields to return
Version:5.x
英文原文地址:Selecting fields to return
有时候,不需要让 Elasticsearch 返回查询的文档中的全部字段。举个栗子,当展示最近发布的博客时,在查找到最新的帖子后只需要返回博客的标题。
有两种方法可以用来返回文档中的部分字段,即部分文档(我们使用这个术语来描述)。一个是 stored fields ,另一个是 source filtering ,两者在工作方式上有很大的不同。
Stored fields
索引文档时,默认情况下,Elasticsearch 将最初发送的 JSON 文档存储在一个名叫 _source 的特殊字段中。从搜索查询返回的文档是 Elasticsearch 返回的每个命中的 _source 字段的具体化。
还可以在映射的时候使用 store ,把 JSON 文档中的字段分别存储在 Elasticsearch 中。为什么要这么做呢?你可能禁用了 _source 以便不存储源文档,并选择存储特定的字段。另一种可能性是,_source 包含一个具有较大值的字段(例如一篇博客的正文),但通常只需要另一个字段(例如博客的标题)。这种情况下,我们不想为了得到一个小字段而反序列化整个 _source。
重要:选择禁用类型映射中的
_source,意味着不存储发送到 Elasticsearch 的原始 JSON 文档,因此永远无法检索原始文档。虽然这样做可以节省磁盘空间,但与此同时某些功能(如 Reindex API 或者 highlighting)也将无法正常工作。一定要认真考虑,禁用源文档是否真的符合你的需求。
以这种方式存储字段时,可以使用搜索请求的 .StoredFields() 方法来指定需要返回的字段
var searchResponse = client.Search<Project>(s => s
    .StoredFields(sf => sf
        .Fields(
            f => f.Name,
            f => f.StartedOn,
            f => f.Branches
        )
    )
    .Query(q => q
        .MatchAll()
    )
);
使用响应对象的 .Fields 属性检索它们
foreach (var fieldValues in searchResponse.Fields)
{
    var document = new
    {
        Name = fieldValues.ValueOf<Project, string>(p => p.Name),
        StartedOn = fieldValues.Value<DateTime>(Infer.Field<Project>(p => p.StartedOn)),
        Branches = fieldValues.Values<Project, string>(p => p.Branches.First())
    };
}
这种方法在单独存储字段时有效。然而,更常见的情况是从 _source 中返回选择的字段。这便是 source filtering 的由来。
Source filtering
搜索查询时使用 source filtering 可以返回文档的部分字段
var searchResponse = client.Search<Project>(s => s
    .Source(sf => sf
        .Includes(i => i
            .Fields(
                f => f.Name,
                f => f.StartedOn,
                f => f.Branches
            )
        )
        .Excludes(e => e
            .Fields("num*")
        )
    )
    .Query(q => q
        .MatchAll()
    )
);
在请求中指定了源过滤之后,响应对象的 .Documents 就只包含部分文档了、
var partialProjects = searchResponse.Documents;
你也可以从查询中完全排除 _source
searchResponse = client.Search<Project>(s => s
    .Source(false)
    .Query(q => q
        .MatchAll()
    )
);
												
											NEST - 返回部分文档的更多相关文章
- NoSQLBooster如何MongoDB的部分文档从一个集合拷贝到另外一个集合中
		
假设MongoDB数据库中存有collection_A和collection_B两个集合,如下图所示: (一)先从集合collection_A中拷贝选择的文档 打开collection_A,看到目前有 ...
 - ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex
		
摘自:https://es.xiaoleilu.com/070_Index_Mgmt/31_Metadata_source.html The _source field stores the JSON ...
 - 《高性能SQL调优精要与案例解析》——10.4_SQL语句改写部分文档
		
应各位读者要求,现将<高性能SQL调优精要与案例解析>中<10.4 SQL语句改写>部分整理成电子文档,上传至群共享文件(群号:298176197): 或者通过如下链接下载: ...
 - Java之反射(部分文档摘过来方便以后查看)
		
第1章 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. l 加载 就是指将class文件读入内存,并为之创建 ...
 - css设置超出部分文档隐藏(在table标签中不好使解决方案在下)
		
css设置: .text-over{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer} div设 ...
 - Elasticsearch-如何控制存储和索引文档(_source、_all、返回源文档的某些字段)
		
Elasticsearch-如何控制存储和索引文档(_source._all) _source:可以在索引中存储文档._all:可以在单个字段上索引所有内容. 1. 存储原有内容的_source _s ...
 - 解决Mongoose 返回的文档过大导致模板引擎art-template无法渲染的问题,错误-RangeError: Maximum call stack size exceeded
		
参考:https://blog.csdn.net/qq_40659195/article/details/88411838 最近尝试用Node写一个小案例,使用到了MongoDB,使用过的人可以知道, ...
 - 返回当前文档的文档的url
		
HTML DOM referrer 属性 HTML DOM Document 对象 定义和用法 referrer 属性可返回载入当前文档的文档的 URL. 语法 document.referrer 说 ...
 - web api .net  C#  mvc API返回XML文档的解析并取值
		
[HttpGet] public System.Net.Http.HttpResponseMessage GetNotify() { var xmlstring = @" <xml&g ...
 
随机推荐
- oracle 12514文件解决
			
listener.ora的SID_LIST_LISTENER添加一下内容 (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = f:\app\Admini ...
 - 数据库join union 区别
			
join 是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集. 1.JOIN和UNION区别 join 是两张表做交连后里 ...
 - 009_关闭linux的THP
			
背景:公司某个大型业务系统反馈最近数据库服务器总是宕机(此处描述不准确,后面解释),最后,客户.运维人员都觉得实在是忍无可忍了,项目经理打电话找到我问是否能帮忙诊断一下,刚好第二天要去现场沟通另外一个 ...
 - socket 通信 error:88
			
调用函数(setsockopt)来设置 recv buffer 和send buffer时报错: setsockopt error: Socket operation on non-socket(e ...
 - atom 的使用插件
			
emmet # html补全minimap # 源码预览图linter # 语法检查file-icons # 文件图标docblockr # 注释块autoclose-html # 自动闭合html标 ...
 - OpenSIPS 1.11.1安装记录
			
说明:操作系统Centos 6.5 64位 安装步骤: 1.安装依赖包 : yum -y install gcc make gdb wget yum -y install flex bison nc ...
 - springboot:集成fastjson(教训)
			
网上有很多介绍,主要有两种. 1.在启动类中注入bean /** * 集成fastjson * * @return */ @Bean public HttpMessageConverters fast ...
 - Oracle的AES加密与解密用法
			
Oracle的AES加密与解密用法2013年12月11日 11:50:35 iteye_751 阅读数:428--加密字符串create or replace function des3_enc( i ...
 - linux与window互传文件
			
首先我们的目标是把一个很大的文件传到linux中,所以我们先要让linux节点开启ftp服务 FTP 10.1.61.212 如果对方没有开启FTP服务,那么这个命令就不会有效果. 1.开启xftp ...
 - flex 兼容性写法
			
flex http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 阮一峰老师详解 box 用于父元素的样式: display: box; 该属 ...