您可以使用 NEST 2 从 InnerHits 获得强类型命中吗?

2024-01-05

我正在使用 NEST 2 客户端对我们的 Elasticsearch 执行查询。

我们有一个查询,用于查询嵌套文档数组,并使用 .InnerHits() 在结果中包含嵌套文档的匹配项。

有没有办法将 InnerHits 的结果强类型化到特定的 POCO 类,而不是动态访问结果字段?


就在这里;这是内部命中集成测试的示例 https://github.com/elastic/elasticsearch-net/blob/2.x/src/Tests/Search/Request/InnerHitsUsageTests.cs;对于任何可以返回内部命中的搜索,原则都是相同的

public interface IRoyal
{
    string Name { get; set; }
}


[ElasticsearchType(IdProperty = "Name")]
public abstract class RoyalBase<TRoyal> : IRoyal
    where TRoyal : class, IRoyal
{
    public string Name { get; set; }
}

public class King : RoyalBase<King>
{
    public List<King> Foes { get; set; }
}

public class Prince : RoyalBase<Prince> { }
public class Duke : RoyalBase<Duke> { }
public class Earl : RoyalBase<Earl> { }
public class Baron : RoyalBase<Baron> { }
  1. Each King有一个其他的列表King谁是国王的敌人。
  2. A King has n Prince儿童和
  3. Each Prince has n Duke孩子们
  4. Each Duke has n Earl孩子们
  5. Each Earl has n Baron孩子们

因此,我们有四种降序的父/子关系。每个文档使用的 id 是Name文档上的属性。

使用这种设置的强类型内部命中搜索的一个示例是

var response = client.Search<Duke>(s => s
    .Index(index)
    .InnerHits(ih => ih
        .Type<Earl>("earls", g => g
            .Size(5)
            .InnerHits(iih => iih
                .Type<Baron>("barons")
            )
            .FielddataFields(p => p.Name)
        )
    )
);

然后处理响应,演示强类型访问的几种方法

foreach (var hit in response.Hits)
{
    // each hit here is a Hit<ILazyDocument> i.e.
    // no strongly typed access
    var earlHits = hit.InnerHits["earls"].Hits;

    // strongly typed access to documents using
    // .Documents<T>()
    var earls = earlHits.Documents<Earl>();

    foreach (var earlHit in earlHits.Hits)
    {
        // use Source.As<T> to access source strongly typed
        var earl = earlHit.Source.As<Earl>().Name;

        var baronHits = earlHit.InnerHits["barons"];

        // strongly typed access to documents
        var baron = baronHits.Documents<Baron>();

        // do something with baron documents
    }
}

访问响应时需要知道类型,因为客户端不会存储或保留内部命中的名称与 C# 类型的关系。

内部命中在内部反序列化为 Json.NetJObject类型,与.Source.As<T>() and .Documents<T>() using JToken.ToObject<T>()在 Json.Net 中执行转换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您可以使用 NEST 2 从 InnerHits 获得强类型命中吗? 的相关文章

随机推荐

  • 解析错误:语法错误,文件第 128 行出现意外的 $end

    嗨 这是代码 它是一个页面 用于在下拉列表中显示数据库中可用的表 然后在表中显示结果 执行此操作的实际代码 在中间 本身可以完美运行 但是当我尝试在其周围添加模板时 我会收到错误
  • Chrome 调试器中显示“警告:显示临时标头”

    I noticed a strange caution message when looking at downloaded resources using Google chrome inspector F12 显示临时标题 我发现了一些
  • 使用 Python 通过 ssh 执行命令

    我正在编写一个脚本来自动执行 Python 中的一些命令行命令 目前 我正在拨打这样的电话 cmd some unix command retcode subprocess call cmd shell True 但是 我需要在远程计算机上
  • 在 Terraform 中使用本地 Docker 镜像

    我想在 Terraform 中使用本地 Docker 映像 更具体地说 我有一个 Google Cloud Build Pipeline 它构建了一个 Docker 映像 我想将其部署到带有 Terraform 的 GCP Cloud Ru
  • 为什么 int j = 012 给出输出 10?

    在我的实际项目中偶然发生了这里是我修改的小程序 我不明白为什么它会给出输出10 public class Int public static void main String args int j 012 accidentaly i put
  • fusion 能看穿新型包装吗?

    Given newtype MyVec MyVec unVec Data Vector deriving Functor etc 这将创建 类似于 instance Functor MyVec where fmap f MyVec Data
  • 如何使用 django-tables2 从自定义 sql 渲染表?

    我正在使用 Django 和 django tables2 在 Web 界面中很好地表示 sql 查询 我有一个遗留的 sql 代码 通过标准 models py 定义它非常非常复杂 问题是 如何使用 django tables2 从自定义
  • ld:找不到 -lz 的库

    这让我发疯 当我尝试在模拟器上编译时 一切正常 但在设备上我收到此错误 ld library not found for lz Command Developer Platforms iPhoneOS platform Developer
  • 新版 Google Play 管理中心出现数以千计的奇怪崩溃

    Google Play 管理中心的 ANR 和崩溃部分最近已更新 可显示更多 ANR 和崩溃 自动从选择加入的用户收集 我在各种 Android 版本和设备上发现了很多奇怪的新崩溃 1 最常见的 每周出现数千次 没有任何类名的 ClassN
  • 什么是$cacheFactory?

    我完全找不到任何关于具体内容的信息 cacheFactory是什么以及它如何在您的应用程序中发挥作用 角度文档说 构造缓存对象并提供对它们的访问的工厂 cacheFactory http docs angularjs org api ng
  • 从数组中创建列表

    进行练习时遇到困难雄辩的Javascript书 http eloquentjavascript net 任务是从数组中创建一个列表 该列表是这样的 var list value 1 rest value 2 rest value 3 res
  • 样式输入文件和自动提交

    我试图有一个用户单击的单个文本链接 它会询问用户他 她想要上传哪个文件 然后自动将其发布到表单中 我怎样才能达到同样的效果 我知道我必须设置文件输入的样式 但如何让它在选择文件时自动发布 非常感谢 在页面中嵌入 javascript 是不好
  • Django:模板中显示的多维字典

    我有以下视图 但发现无法通过模板显示 sm request session get active semester semester dates SemesterDates objects filter semester sm schedu
  • jQuery 文件大小

    在jQuery的官方网站上 他们说缩小后的文件大小是18k 但是下载后 我发现是53 9K 下载后我需要做一些压缩吗 该网站声称它已缩小为 18kgzipped 因此 您需要设置 Web 服务器来压缩 JavaScript 文件才能查看文件
  • Outlook VSTO 功能区到主页 tabControlId

    我正在写一个VSTO http en wikipedia org wiki Visual Studio Tools for Office 微软Outlook http en wikipedia org wiki Microsoft Outl
  • 使用 Gmail API 从 Gmail 下载附件

    我在用邮箱API https developers google com gmail api访问我的 Gmail 数据以及谷歌Python API客户端 https github com googleapis google api pyth
  • 从 sklearn.pipeline.Pipeline 获取转换器结果

    我正在使用一个sklearn pipeline Pipeline我的聚类对象 pipe sklearn pipeline Pipeline transformer1 transformer1 transformer2 transformer
  • Javascript 按随机百分比机会执行函数

    可以说 我想按百分比机会触发一个函数 function A console log A triggered 50 chance to trigger if Math random gt 0 5 A 现在我想添加更多功能来偶然触发 我所做的是
  • Excel 将字段添加到 Xml 映射

    我在 Excel 2010 工作表上有一个 XML 地图 我会定期从 XML 文件的内容中刷新该地图 我最近向 XML 数据添加了一个新字段 并希望它显示在我的 XML 地图上 我只是希望能够添加新字段 但它看起来虽然必须再次导入整个结构
  • 您可以使用 NEST 2 从 InnerHits 获得强类型命中吗?

    我正在使用 NEST 2 客户端对我们的 Elasticsearch 执行查询 我们有一个查询 用于查询嵌套文档数组 并使用 InnerHits 在结果中包含嵌套文档的匹配项 有没有办法将 InnerHits 的结果强类型化到特定的 POC