Azure 搜索 .NET SDK 自定义分析器

2024-04-30

没有太多背景,这是我的问题:

要使用 C# 中的 .NET SDK 创建新的 Azure 搜索索引(使用文档中提供的酒店示例),我的代码如下所示:

public class Hotel
{
    [System.ComponentModel.DataAnnotations.Key]
    [IsFilterable]
    public string HotelId { get; set; }

    [IsFilterable, IsSortable, IsFacetable]
    public double? BaseRate { get; set; }

    [IsSearchable]
    public string Description { get; set; }

    [IsSearchable]
    [Analyzer(AnalyzerName.AsString.FrLucene)]
    [JsonProperty("description_fr")]
    public string DescriptionFr { get; set; }

    [IsSearchable, IsFilterable, IsSortable]
    public string HotelName { get; set; }

    [IsSearchable, IsFilterable, IsSortable, IsFacetable]
    public string Category { get; set; }

    [IsSearchable, IsFilterable, IsFacetable]
    public string[] Tags { get; set; }

    [IsFilterable, IsFacetable]
    public bool? ParkingIncluded { get; set; }

    [IsFilterable, IsFacetable]
    public bool? SmokingAllowed { get; set; }

    [IsFilterable, IsSortable, IsFacetable]
    public DateTimeOffset? LastRenovationDate { get; set; }

    [IsFilterable, IsSortable, IsFacetable]
    public int? Rating { get; set; }

    [IsFilterable, IsSortable]
    public GeographyPoint Location { get; set; }
}

private static void CreateHotelsIndex(ISearchServiceClient serviceClient)
    {
        var definition = new Index
        {
            Name = "hotels",
            Fields = FieldBuilder.BuildForType<Hotel>()
        };

        serviceClient.Indexes.Create(definition);
    }

这很好用。

使用 .NET SDK 进行搜索时会出现此问题。前缀搜索工作正常

var results = indexClient.Documents.Search<Hotel>("cheap*");

将返回带有以“cheap”开头的字符串的所有文档,但我需要 string.Contains() 类型的功能,或者至少需要后缀搜索。我正在尝试做类似的事情

var results = indexClient.Documents.Search<Hotel>("*heap*");

获取任意位置包含字符串“heap”的所有结果。

我知道有多种方法可以使用自定义分析器来执行此操作,但这些分析器只能通过 Azure 搜索 REST API 创建和应用,并且只能在创建索引时进行。这使得我上面提供的几乎所有内容都无法使用,因为我必须通过 Postman 在 JSON 中定义“酒店”索引、字段和分析器,而 SDK 实际上只对查询有用。这还意味着我需要在创建的每个索引中重复定义相同的自定义分析器,因为 Azure 搜索似乎不支持全局分析器定义。

所以这里的问题是:有没有一种方法可以在 C# 中定义自定义分析器,我可以在创建时引用该分析器并将其应用于我的索引?或者,真的有一种简单的方法可以仅使用 .NET SDK 获得完整的通配符支持吗?


你可以这样做:

private static void CreateHotelsIndex(ISearchServiceClient serviceClient)
{
    var definition = new Index
    {
        Name = "hotels",
        Fields = FieldBuilder.BuildForType<Hotel>(),
        Analyzers = new[]
        {
            new CustomAnalyzer
            {
                Name = "my_analyzer",
                Tokenizer = TokenizerName.Standard,
                TokenFilters = new[]
                {
                    TokenFilterName.Lowercase,
                    TokenFilterName.AsciiFolding,
                    TokenFilterName.Phonetic
                }
            }
        }
    };

    serviceClient.Indexes.Create(definition);
}

...然后在文档定义中引用自定义分析器:

[IsSearchable, IsFilterable, IsSortable, Analyzer("my_analyzer")]
public string HotelName { get; set; }

See Azure 搜索中的自定义分析器 https://azure.microsoft.com/en-ca/blog/custom-analyzers-in-azure-search/博客文章和 API 单元测试示例自定义分析仪测试 https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/search/Microsoft.Azure.Search/tests/Tests/CustomAnalyzerTests.cs了解更多信息。

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

Azure 搜索 .NET SDK 自定义分析器 的相关文章

随机推荐

  • Edge 中的 Javascript 仅适用于打开的 devtools

    我遇到的问题是 在 MS Edge 中 我的图像映射功能只能部分工作 它由淘汰赛 FW 提供动力 在更大的图像映射上 它不会将整个图像映射注册到视图模型中 因此 图像映射的所有悬停效果和单击样式都会停止工作 然而 这只是大图像地图的问题 还
  • 上传太大文件时显示有意义的错误

    我们对网站上上传的文件大小设置了固定限制 低于默认的 asp net 和 iis 设置的大小 我在 Application BeginRequest 中有一个简单的 catch 设置来捕获这个 它不是 excat 因为它检查 Content
  • Java applet - 以 png 格式保存图像

    我正在创建一个用于制作头像的简单小程序 您可以选择脸部 头发 眼睛等 然后将其作为 png 文件保存到光盘上 简单版本 为了简单起见 没有界面 如下所示 import java awt import java applet import j
  • 使用 Rijndael 加密/解密文件

    我需要传输 xml 文件 并且需要对它们进行加密 我发现一些例子认为我已经接近了 但是当我解密文件时 我最终得到了尾随垃圾字符 有一些关于此的帖子 但我还没有看到任何能真正有帮助的帖子 这是加密和解密代码 private void Encr
  • 检查窗口是否已经打开 window.open

    我有一个 html 页面 在我调用的页面正文中onload调用 javascript 函数打开弹出窗口的事件 这是代码 var newWindow null function launchApplication if newWindow n
  • 如何在matlab中绘制彩色一维直方图

    我有一个一维数组 X 其中包含相关系数的统计数据 我想绘制一个彩色直方图 我使用以下代码 histogram X 10 它可以创建具有单色的直方图 现在我想绘制一个直方图 其中每个条形都有不同的颜色 但 FaceColor 选项只能调整整个
  • 使用线程和 ruby​​ mechanize 安全吗?

    有没有人见过很多这样的错误 Exception Net HTTPBadResponse at usr lib ruby 1 8 net http rb 2022 wrong status line SOME HTML CODE HERE 何
  • 为什么需要在父子组件中多次导入React?

    如果您有已导入的父组件文件React 为什么它的任何渲染的子文件也需要导入 React 这是否只是一种安全措施 以防这些子项被渲染到尚未导入 React 的其他地方 In nodejs每个文件都是一个模块 有自己的变量范围 当您将变量导入文
  • 如何通过服务帐户使用 Terraform `google_app_engine_domain_mapping`?

    我正在尝试使用以下配置通过 Terraform 创建 GCP App Engine 域映射 provider google version 3 36 0 region var region resource google app engin
  • 当我停止我的应用程序后,IntentService 将被终止

    我指的是android 设计注意事项 AsyncTask 与 Service IntentService https stackoverflow com questions 3817272 android design considerat
  • 如何防止双击时选择 HTML5 画布外部的文本?

    在我尝试过的每个浏览器中 双击 HTML5 画布会选择紧跟在画布元素后面的任何文本 我更愿意将点击次数限制在画布上 注意 我不想完全禁用文本选择 例如 像this https stackoverflow com questions 8805
  • Python套接字模块:Recv()数据响应被切断

    解释 我目前正在尝试使用 python 脚本控制智能电源板 为了实现这一点 我使用了带有套接字模块的 TCP 连接 大约 75 的情况下 我会得到我正在寻找的响应 数据 并且一切都运行良好 然而 大约 25 的情况下 响应会以完全相同的长度
  • 在 DB2 中使用什么来表示 CURRENT_TIMESTAMP?

    我正在将一些 MySQL 语句转换为 DB2 数据库 但我在以下查询中遇到了问题 CREATE TABLE RFX EVENT MAPPING EVENT TYPE varchar 4 NOT NULL EVENT DESC varchar
  • 在 JavaScript 中的空数组上使用 foreach 循环[重复]

    这个问题在这里已经有答案了 我发现我不能在 javascript 中的空数组上使用 for every 循环 谁能向我解释这是为什么 我已经在 javascript 中初始化了一个数组 如下所示 var arr new Array 10 当
  • shouldChangeCharactersInRange 在 Swift 中如何工作?

    我在用着应该改变范围内的字符作为使用即时类型搜索的一种方式 然而我有一个问题 应该改变范围内的字符在文本字段实际更新之前被调用 在 Objective C 中 我使用以下方法解决了这个问题 BOOL textField UITextFiel
  • 在 SQL 存储过程中选择并合并表中的行

    有一个具有架构的临时表 ID 序列号 姓名 ID 不唯一SeqNo 整数 可以是 1 2 或 3 以ID SeqNo作为主键排序名称 任何文本 表中的示例数据如下 1 1 RecordA 2 1 RecordB 3 1 RecordC 1
  • 如何将 Jar 库添加到 IntelliJ Idea SBT Scala 项目?

    我创建了一个 IntelliJ Idea SBT Scala 项目 例如海科 西伯格的文章 http heikoseeberger blogspot com 2010 08 how to setup scala project with s
  • 用 CSS 设置背景图像的大小?

    可以用CSS设置背景图片的大小吗 我想做类似的事情 background url bg gif top repeat y background size 490px 但这样做似乎是完全错误的 CSS2 如果需要放大图像 则必须在图像编辑器中
  • jquery中元素+ ID vs 只有ID?

    div some id将扫描整个 DOM 中的所有 div some id将直接从 DOM 获取 ID 那么哪个更快呢 div some id or some id See 优化选择器 https learn jquery com perf
  • Azure 搜索 .NET SDK 自定义分析器

    没有太多背景 这是我的问题 要使用 C 中的 NET SDK 创建新的 Azure 搜索索引 使用文档中提供的酒店示例 我的代码如下所示 public class Hotel System ComponentModel DataAnnota