ElasticSearch 5.x 上下文建议器 NEST .Net

2023-12-04

我正在尝试使用 ElasticSearch 5.1.2 上的 Nest 5.0 创建一个带有上下文建议器的索引。

目前,我可以创建映射:

elasticClient.MapAsync<EO_CategoryAutocomplete>(m => m
                .Properties(p => p
                    .Completion(c => c
                        .Contexts(ctx => ctx
                            .Category(csug => csug
                                .Name("lang")
                                .Path("l")
                            )
                            .Category(csug => csug
                                .Name("type")
                                .Path("t")
                            )
                            .Category(csug => csug
                                .Name("home")
                                .Path("h")
                            )
                        )
                        .Name(n => n.Suggest)
                    )
                )
            );

但在 POCO 类中我不知道对象类型必须是什么Suggest属性标记为?????:

public class EO_CategoryAutocomplete
{
    public string Id { get; set; }
    public ????? Suggest { get; set; }
}

public class EO_CategoryAC
{
    public int Id { get; set; }
    public string Name { get; set; }
}

在巢5.0中完成字段属性已被删除(这是在elasticsearch 2.X上进行上下文建议的方法)

请问,谁能提供一个关于如何做到这一点的例子吗?

文档都是关于查询的。建议者巢

Thanks.


完成和上下文建议器能够返回_source在 5.x+ 的响应中,因此不再需要有效负载。因此,NEST 5.x 中的类型现在是CompletionField,相对于CompletionField<TPayload>在 NEST 2.x 中,其中TPayload是有效负载类型。

以下是 NEST 5.x 的示例,可帮助您启动并运行

public class EO_CategoryAutocomplete
{
    public string Id { get; set; }
    public IEnumerable<string> L { get; set; }
    public CompletionField Suggest { get; set; }
}

void Main()
{
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
    var connectionSettings = new ConnectionSettings(pool)
            .DefaultIndex("autocomplete");

    var client = new ElasticClient(connectionSettings);

    if (client.IndexExists("autocomplete").Exists)
        client.DeleteIndex("autocomplete");

    client.CreateIndex("autocomplete", ci => ci
        .Mappings(m => m
            .Map<EO_CategoryAutocomplete>(mm => mm
                .AutoMap()
                .Properties(p => p
                    .Completion(c => c
                        .Contexts(ctx => ctx
                            .Category(csug => csug
                                .Name("lang")
                                .Path("l")
                            )
                            .Category(csug => csug
                                .Name("type")
                                .Path("t")
                            )
                            .Category(csug => csug
                                .Name("home")
                                .Path("h")
                            )
                        )
                        .Name(n => n.Suggest)
                    )
                )
            )
        )
    );

    client.IndexMany(new[] {
        new EO_CategoryAutocomplete 
        {
            Id = "1",
            Suggest = new CompletionField
            {
                Input = new [] { "async", "await" },
                // explicitly pass a context for lang
                Contexts = new Dictionary<string, IEnumerable<string>>
                {
                    { "lang", new [] { "c#" } }
                }
            }
        },
        new EO_CategoryAutocomplete
        {
            Id = "2",
            Suggest = new CompletionField
            {
                Input = new [] { "async", "await" },
                // explicitly pass a context for lang
                Contexts = new Dictionary<string, IEnumerable<string>>
                {
                    { "lang", new [] { "javascript" } }
                }
            }
        },
        new EO_CategoryAutocomplete
        {
            Id = "3",
            // let completion field mapping extract lang from the path l
            L = new [] { "typescript" },
            Suggest = new CompletionField
            {
                Input = new [] { "async", "await" },
            }
        }
    }, "autocomplete");

    client.Refresh("autocomplete");

    var searchResponse = client.Search<EO_CategoryAutocomplete>(s => s
        .Suggest(su => su
            .Completion("categories", cs => cs
                .Field(f => f.Suggest)
                .Prefix("as")
                .Contexts(co => co
                    .Context("lang", 
                        cd => cd.Context("c#"), 
                        cd => cd.Context("typescript"))
                )
            )
        )
    );

    // do something with suggestions
    var categorySuggestions = searchResponse.Suggest["categories"];
}

The searchResponse returns

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "suggest" : {
    "categories" : [
      {
        "text" : "as",
        "offset" : 0,
        "length" : 2,
        "options" : [
          {
            "text" : "async",
            "_index" : "autocomplete",
            "_type" : "eo_categoryautocomplete",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "id" : "3",
              "l" : [
                "typescript"
              ],
              "suggest" : {
                "input" : [
                  "async",
                  "await"
                ]
              }
            },
            "contexts" : {
              "lang" : [
                "typescript"
              ]
            }
          },
          {
            "text" : "async",
            "_index" : "autocomplete",
            "_type" : "eo_categoryautocomplete",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "id" : "1",
              "suggest" : {
                "input" : [
                  "async",
                  "await"
                ],
                "contexts" : {
                  "lang" : [
                    "c#"
                  ]
                }
              }
            },
            "contexts" : {
              "lang" : [
                "c#"
              ]
            }
          }
        ]
      }
    ]
  }
}

建议带有 id 的文档"1" and "3"。您还可以使用源过滤仅返回您感兴趣的字段_source.

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

ElasticSearch 5.x 上下文建议器 NEST .Net 的相关文章

  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • \s 在 C++ 正则表达式中不起作用

    我昨天开始学习正则表达式 在学习时 我看到 s 用于空白字符 但是 由于某种原因 每当我输入空格时 C 中都不会检测到它 Code include
  • 使用维恩图来描述表为集合的 SQL 连接是否合适?

    网上搜索SQL join可以找到下图 我们可以将其解释为维恩图 通过以下方式 标记为表 A 的圆圈是表 A 中的记录集 标记为表 B 的圆圈是表 B 中的记录集 集合的交集表示内连接 也称为 SQL 中的连接 动机 所示的图表在网络上以各种
  • 如何计算mysql中唯一的列值

    这是我的数据 cardNo userName tablename hours date 1 a a 12 12 06 2015 1 a a 5 11 06 2015 2 b b 3 15 06 2015 1 a a 8 12 06 2015
  • 如何在 angularjs 下拉元素上正确使用 ng-change ?

    我的模板中有这个下拉列表 div class col lg 5 col md 5 col sm 5 col xs 5 div class input group input group sm div div
  • dd-mm-yyyy hh:mm 的正则表达式

    我想查看日期dd mm yyyy hh mm格式 现在我正在使用 0 1 9 1 d 2 d 3 01 0 1 9 1 d 2 d 3 01 19 20 d 2 匹配日期的正则表达式dd mm yyyy format 但我想检查一下dd m
  • 桌面快捷方式的位置存储在哪里?

    Windows桌面快捷方式的位置存储在哪里 我问的是屏幕职位图标的一部分 而不是实际的图标本身 我知道图标本身存储在各种 DLL EXE 等中 这些位置显然存储在某些非易失性存储中 因为它们在重新启动时仍然存在 我的最终目标是编写一个应用程
  • 阻止滚动函数多次触发?

    所以我有一个脚本 可以从数据库中提取数据并在用户接近页面底部时显示它 问题 当用户到达底部时 脚本应该只返回一个帖子 但实际上 正在发出多个请求 导致所有帖子都被快速从数据库中提取 这反过来又以错误的方式返回它们命令 我的问题是 有没有人知
  • 使用 open() 或 creat() 创建文件的权限位设置比我要求的要少

    我正在编写一个程序来模仿 cp 实用程序 但是 我无法获得文件权限以正常工作 我知道它们存储在结构中stat并存储在st mode场与stat 我的问题是我没有获得组或其他类别的写入权限 即我得到 rwxr xr x作为文件的权限 即使源文
  • Java 8 流的 toArray 和 size 参数

    我想知道stream toArray x gt new Integer x 如何知道数组的大小 我写了一个片段 其中创建了一个大小为 4 的整数列表并过滤了值 它创建了一个过滤流长度的数组 我在流上看不到任何方法来获取流的大小 List
  • 使用 Aforge.Net 将灰度图像转换为黑白图像

    我对 Aforge Net 很陌生 我正在寻找一种将灰度图像转换为黑白图像的方法 我真的找不到任何支持吗 我设法通过应用灰度滤镜将普通图像转换为灰度图像 但我找不到任何有关黑白转换的信息 有人可以帮我一下吗 使用阈值类别将图像转换为黑白图像
  • Java applet 在 Web 上的可用性

    对于我们大学的电子学习项目 我们使用 Java 小程序在 Ilias 学习单元内显示一些交互式内容 例如一些交互式函数绘图或一些简单的问答系统或其他交互式元素以及这些元素的任意组合 我们决定使用 Java 因为我们想要一个开放的解决方案 当
  • Git:使一个分支与另一个分支完全相同

    我对 Git 比较陌生 而且仍然不太适应 现在 我正在寻找可以使当前分支看起来像另一个分支的命令 选项 魔法 也就是说 合并它们 但当出现冲突时 始终选择要合并到当前分支中的差异 我的情况是这样的 我在 master 分支上有一个稳定的应用
  • d3js 动态 csv 从下拉列表切换

    我是 d3js 的新手 我在这里成功使用了示例 https gist github com d3noob 4414436 这非常好 因为它可以远程工作 CSV 存储在服务器端 现在 我想更进一步 添加从列表中选择源 CSV 并重新绘制图表的
  • # 和 ## 运算符在 C 中做什么? [复制]

    这个问题在这里已经有答案了 类似 NAME 或 NAME 它们在C中是什么意思 我在关于宏的 GCC 文档中看到了它们 运算符 连接两个参数 它们之间不留空格 define printe a b a b printe c out lt lt
  • 动态导入 JavaScript

    请问将 JavaScript js 文件动态导入父 JavaScript 代码的正确方法是什么 我正在使用以下代码 但它似乎不正确 function loadjscssfile filename filetype if filename i
  • 类型错误:“图像”对象不可使用 PIL 进行下标

    我正在尝试在 google colab 上开发一个网络应用程序 我想在这个 Web 应用程序中使用我之前训练过的模型制作一个图像分类器 当我在 Web 应用程序中从浏览器中选择要分类的图像时 出现以下错误 TypeError Image o
  • 从 NSMutable 字典中分离键和对象,并使用 sqlite 的插入命令中的值

    大家好 我正在 iPhone 中开发一个 sqlite 应用程序 因为我是这个应用程序的新手 所以我不知道如何在 sqlite 的插入语句命令中使用 NSMutableDictionary 中的键和对象 例如 我想要以下格式的插入语句 插入
  • 直接在javascript函数中调用C#方法

    如何在 javascript 函数中直接调用 C 方法 例如page load页面后面代码的方法 请帮我 要在客户端事件上调用服务器端方法 您需要执行以下操作 1 创建服务器端方法 void DoSomething 2 实施System W
  • 如何从 Perl 脚本运行“source”命令(Linux)?

    我在尝试着source来自 Perl 脚本 script pl 的脚本 system source some generic script 请注意 这个通用脚本可以是 shell python 或任何其他脚本 另外 我无法将这个通用脚本中存
  • ElasticSearch 5.x 上下文建议器 NEST .Net

    我正在尝试使用 ElasticSearch 5 1 2 上的 Nest 5 0 创建一个带有上下文建议器的索引 目前 我可以创建映射 elasticClient MapAsync