了解azure搜索charFilters映射

Ton*_*ony 2 tokenize analyzer azure-cognitive-search

我使用以下自定义分析器创建索引

"analyzers":[
 {
    "name":"shinglewhite_analyzer",
    "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
    "charFilters":[
       "map_dash"
    ],
    "tokenizer":"whitespace",
    "tokenFilters":[
        "shingle"
    ]
 }
],
"charFilters":[
 {
    "name":"map_dash",
     "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
     "mappings":[ "_=> " ]
 }
]
Run Code Online (Sandbox Code Playgroud)

问题是来自输入的像ice_cream这样的单词与查询冰淇淋不匹配,但它与冰淇淋相匹配.有人可以帮我理解这是如何工作的,如果我做错了什么?

此外,我们想查询"冰淇淋"以匹配"冰淇淋",​​"冰淇淋"和"冰淇淋",​​但有利于那些有序.

Yah*_*osh 6

为了映射到空格,请使用以下表示法(我们将更新文档以包含此信息):

{
    "name":"map_dash",
    "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
    "mappings":[ "_=>\\u0020" ]
}         
Run Code Online (Sandbox Code Playgroud)

此外,默认情况下,木瓦标记过滤器用空格分隔标记.如果要将后续标记连接到没有分隔符的标记,则需要自定义过滤器,如下例所示:

{
    "name": "my_shingle",
    "@odata.type":"#Microsoft.Azure.Search.ShingleTokenFilter",
    "tokenSeparator": "" 
}
Run Code Online (Sandbox Code Playgroud)

对于令牌ice_cream的这两个更改,您的分析仪将生成:冰,冰淇淋,奶油.

我希望有所帮助