【发布时间】:2018-08-01 04:58:06
【问题描述】:
我在索引中的某个字段上有一个自定义分析器。分析器使用 PatternTokenizer 将连字符的单词放在一起。它使用一个小写令牌过滤器(@odata.type: #Microsoft.Azure.Search.LowercaseTokenFilter),因此单词以小写形式存储在索引中。
分析器已设置,因此它与搜索分析器不是不同的索引分析器。
但是,当我使用 REST api 搜索大写或混合大小写术语时,我没有得到任何结果。我只得到搜索小写的结果。
由于搜索和索引的分析器是相同的,即使搜索大写字母,我也会得到预期的结果。
当然,我可能没有正确实现 CustomAnalyzer,但使用分析端点时,它似乎已经以小写形式进行了标记。
这是我为自定义分析器发布到 CreateIndex 的 json
{
"@odata.context": "https://dev-xxx.search.windows.net/$metadata#indexes/$entity",
"@odata.etag": "\"0x8D5F638C546D690\"",
"name": "myproducts",
"fields": [
{
"name": "id",
"type": "Edm.String",
"searchable": false,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": true,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "materialId",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": true,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"synonymMaps": []
},
{
"name": "name",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": true,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"synonymMaps": []
},
{
"name": "hyphenated",
"type": "Collection(Edm.String)",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": false,
"facetable": true,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "pdh",
"synonymMaps": []
}
],
"scoringProfiles": [],
"defaultScoringProfile": null,
"corsOptions": null,
"suggesters": [],
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "xxx",
"tokenizer": "xxx",
"tokenFilters": [
"xxxlowercase"
],
"charFilters": []
}
],
"tokenizers": [
{
"@odata.type": "#Microsoft.Azure.Search.PatternTokenizer",
"name": "xxx",
"pattern": "([a-z])(?![\\w-])",
"flags": null,
"group": -1
}
],
"tokenFilters": [
{
"@odata.type": "#Microsoft.Azure.Search.LowercaseTokenFilter",
"name": "xxxlowercase"
}
],
"charFilters": []
}
那我做错了什么?
显然,我可以通过在发送之前将所有内容小写来控制发送到搜索端点的内容,但我认为无论如何它应该可以工作。
谢谢
【问题讨论】:
标签: azure lucene azure-cognitive-search