我们已将文档存储到 azure search 中。其中一份文件具有以下字段值。
“标题”:“statistics_query.compute_shader_invocations.secondary_inherited 失败”
我们根据 MS Azure 团队的建议在其上定义了自定义分析器,以解决我们因 _(下划线)而面临的问题之一。
{
"name": "myindex",
"fields": [
{
"name": "id",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": true,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null
},
{
"name": "Title",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": true,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "remove_underscore"
}
],
"analyzers": [
{
"name": "remove_underscore",
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters": [
"remove_underscore"
],
"tokenizer": "standard_v2"
}
],
"charFilters": [
{
"name": "remove_underscore",
"@odata.type": "#Microsoft.Azure.Search.MappingCharFilter",
"mappings": [
"_=>-"
]
}
]
}
但是,当我在我的天蓝色搜索索引(版本#2016-09-01 预览版)上使用以下过滤器进行搜索时,我没有得到任何结果。
$filter=search.ismatch('"compute_shader_invocations*"','Title', 'full', 'any')
$filter=search.ismatch('"compute_shader_invocations"','Title', 'full', 'any')
$filter=search.ismatch('"shader_invocations*"','Title', 'full', 'any')
但是,如果我包含带有 (.) 点字符的文本,则相同的过滤器将起作用。
$filter=search.ismatch('"query.compute_shader*"','Title', 'full', 'any')
根据我的测试,如果文档在过滤器中使用的搜索词之后或之前出现点 (.) 字符,则搜索不会返回结果。
因此,下面的过滤器将不起作用,因为文档中存在 (.) 点字符,就在查询中使用的搜索词之前和之后。在我们的例子中,Azure 搜索文档中的单词“compute”之前和单词“invocations”之后都有一个点字符。
$filter=search.ismatch('"compute_shader_invocations*"','Title', 'full', 'any')
$filter=search.ismatch('"compute_shader"','Title', 'full', 'any')
$filter=search.ismatch('"shader_invocations*"','Title', 'full', 'any')
但是下面的过滤器应该可以工作,因为在 Azure 搜索文档中“查询”一词之前或“着色器”一词之后没有点字符
$filter=search.ismatch('"query.compute_shader*"','Title', 'full', 'any') $filter=search.ismatch('"shader*"','Title', 'full', '任何')
这真让我抓狂。任何帮助将不胜感激。