azure - 如何在Azure搜索索引中获取字符匹配而不是子字符串

标签 azure lucene tokenize azure-cognitive-search

我为我的 DocumentDB 集合创建了一个 Azure 索引,它似乎工作正常。该索引具有用户帐户的属性,例如 FirstNameLastNameUsername。问题是默认标记器似乎正在标记Username 字段。虽然我想要前两个字段的标记匹配,但我想要用户名的字符匹配。有没有一种简单的方法可以通过 Azure 门户实现此目的?如果没有,我怎样才能实现这一目标?

最佳答案

根据您的上述评论添加另一个答案。所以基本上在最好的情况下,你要做的是前缀、后缀和通配符搜索。因此,如果用户名是 user246392,您可以通过输入“use”、“392”甚至“er246”来找到它。前缀很简单,因为你可以搜索 use* 并且它会找到它。

Kendra Little 写了一篇非常好的博客文章,介绍了如何利用 RegEx with Azure Search ,这可以让您执行询问的完整通配符部分(即搜索“392”)。

如果您想进行后缀搜索,您可以使用一个非常有效的技巧,即创建一个新字段,该字段将是一个自定义分析器,它将以相反的顺序对单词进行索引。以下是允许此操作的索引架构示例(通过 suffixName 字段)

{   
"name":"people",
"fields": [
    { "name":"id", "type":"Edm.String", "key":true, "searchable":false },
    {"name": "suffixName", "type": "Edm.String", "searchable":true, "indexAnalyzer":"suffixIndexingAnalyzer", "searchAnalyzer":"reverseText"}
],
"analyzers": [
    {
        "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
        "name": "suffixIndexingAnalyzer",  
        "tokenizer": "keyword_v2",
        "tokenFilters": [
            "asciifolding",
            "lowercase",
            "reverse",
            "my_edgeNGramForSuffix"
        ],
        "charFilters": []
    },
    {
        "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
        "name": "reverseText",  
        "tokenizer": "classic",
        "tokenFilters": [
            "lowercase",
            "reverse"
        ],
        "charFilters": []
    }

],
"tokenFilters":[  
    {
        "@odata.type": "#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
        "name": "my_edgeNGramForSuffix",
        "minGram": 2,
        "maxGram": 25,
        "side": "front"
    }
]

}

关于azure - 如何在Azure搜索索引中获取字符匹配而不是子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284248/

相关文章:

javascript - 让 jquery tokeniput 插件与 asp.net mvc 3 一起工作的问题

xQuery 中用于标记化的正则表达式

c# - 使用 Azure Log Analytics 在 Azure Function v3 中进行结构化日志记录

hadoop - Solr clusterstate.json损坏。可以手动还原吗?

lucene - 我们如何使用 Lucene、Solr 或 Nutch 创建一个简单的搜索引擎?

lucene - Sitecore 7 索引树列表 lucene

parsing - 如何使用 Haskell 解析中缀而不是前缀?

azure - 在 WASB ListBlob 中使用通配符

azure - Azure 租户的应用程序注册限制

c# - 如何添加对 Azure Function C# 项目的引用?