You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cognitive Search精准匹配问题:如何实现订单号完全匹配搜索

实现Azure Cognitive Search完全匹配结果的方案

方案1:使用精确短语匹配语法

在Simple查询模式下,将查询词用双引号包裹,强制进行短语级精确匹配,修改代码如下:

var searchClient = _searchIndexClient.GetSearchClient("customerbill");
var searchResults = await searchClient.SearchAsync<AzureSearchCustomerbillDocumentIndexer.CustomerBillIndex>(
    $"Order:\"{OrderMark}\"", // 用双引号包裹查询值实现精确短语匹配
    new SearchOptions { IncludeTotalCount = true, QueryType = SearchQueryType.Simple });

注意:这种匹配受字段分析器影响,如果字段使用了分词或大小写转换的分析器,可能仍会出现大小写不敏感的匹配(比如"Test 1111"匹配"TEST 1111")。

方案2:配置字段为关键字分析器

如果Order字段无需分词(比如订单号是整体唯一值),可在索引定义中将该字段的分析器设置为keyword(保留原始值不分词)或keyword_lowercase(不分词且转为小写,实现大小写不敏感的精确匹配)。

修改索引字段定义示例(SDK创建索引场景):

var index = new SearchIndex("customerbill")
{
    Fields =
    {
        new SimpleField("id", SearchFieldDataType.String) { IsKey = true },
        new SearchableField("Order") 
        { 
            AnalyzerName = LexicalAnalyzerName.Keyword, // 设置关键字分析器
            IsFilterable = true 
        },
        // 其他字段...
    }
};
await _searchIndexClient.CreateOrUpdateIndexAsync(index);

配置后,原查询语法即可实现完全匹配,因为字段值会被完整存储,搜索时不会拆分。

方案3:使用Filter进行精确匹配

Filter操作本身是精确匹配逻辑,性能比搜索查询更高效,适合严格匹配场景,修改代码如下:

var searchClient = _searchIndexClient.GetSearchClient("customerbill");
var searchResults = await searchClient.SearchAsync<AzureSearchCustomerbillDocumentIndexer.CustomerBillIndex>(
    "*", // 搜索所有文档,通过Filter筛选目标结果
    new SearchOptions 
    { 
        IncludeTotalCount = true, 
        Filter = $"Order eq '{OrderMark}'" // 用Filter实现精确匹配
    });

注意:如果OrderMark包含单引号,需要转义为两个单引号('')避免语法错误。

内容的提问来源于stack exchange,提问作者Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:05:04