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 ...
随机推荐
- 遇到一个json解码失败的问题
今日批量导入游戏, 从别人接口拉去的字符串json_decode总是失败, 但是把log里面记录的解码失败的字符串copy出来单独解析,却可以成功. 排除了是字符编码的问题后, 还是不行, 百思不得其 ...
- SharePoint 2016 vs部署报错:无法加载功能xxx未能加载文件或程序集xxx或它的某一个依赖项。系统找不到指定的文件
环境描述: SharePoint 2016 单服务器场模式 开发工具:VS2017,项目类型(功能):计时器. 问题描述: 在用vs直接部署时,报错如下: 部署步骤"激活功能"中出 ...
- java使用RunTime调用windows命令行
当Java需要调用windows系统进行交互时,可以使用Runtime进行操作. 例子: 1.调用window中获取关于java相关的进行信息 Runtime rt = Runtime.getRunt ...
- Windows Server 2008 R2 报错事件ID:10之WMI报错
问题描述: Details -Event filter with query "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHE ...
- luasocket 安装记录 (FS1.6)
说明: 想通过Lua 脚本实现 http.默认 FS 的 mod_lua 中没有对socket 的支持,如下的操作为lua 添加 socket的支持. 一.下载 luasocket 包: # wget ...
- [Linux]PHP-FPM与NGINX的两种通讯方式
一.通过监听TCP端口通讯 php-fpm.d/www.conf ; The address on which to accept FastCGI requests. ; Valid syntaxes ...
- LuoGu P1541 乌龟棋
题目传送门 乌龟棋我并不知道他为啥是个绿题0.0 总之感觉思维含量确实不太高(虽然我弱DP)(毛多弱火,体大弱门,肥胖弱菊,骑士弱梯,入侵弱智,沙华弱Dp) 总之,设计出来状态这题就很简单了 设 f[ ...
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
java虚拟机内存不足,"Could not create the Java Virtual Machine"问题解决方案 在运行java程序时,遇到问题"Could n ...
- Confluence 6 管理插件和组件
一个 组件(add-on)是与 Confluence 分开安装的功能,能够加强 Confluence 的功能和使用.插件(plugin)和 组件(add-on)这 2 个词通常是一起使用的. 一共有 ...
- Python编程:从入门到实践(选记)
本文参考< Python 编程:从入门到实践>一书,作者: [ 美 ] Eric Matthes 第1章 起步 1.1 搭建python环境 在不同的操作系统中, Python 存 ...