gpt4 book ai didi

azure - 不区分大小写的 Azure 搜索

转载 作者:行者123 更新时间:2023-12-03 01:42:31 25 4
gpt4 key购买 nike

我的索引中的字段有一个自定义分析器。分析器使用 PatternTokenizer 将连字符连接在一起。它使用 LowercaseTokenFilter (@odata.type:#Microsoft.Azure.Search.LowercaseTokenFilter),因此单词以小写形式存储在索引中。

分析器已设置,因此它不是与搜索分析器不同的索引分析器。

但是,当我使用 REST api 搜索大写或混合大小写术语时,我没有得到任何结果。我只得到小写字母搜索结果。

由于搜索和索引的分析器相同,即使搜索大写字母,我也会得到预期的结果。

当然,我可能没有正确实现 CustomAnalyzer,但使用分析端点,它似乎确实以小写形式标记化。

这是我的 json,我将其发布到 CreateIndex 以用于自定义分析器

{
"@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": []
}

那么我做错了什么?

显然,我可以通过在发送之前将所有内容都小写来控制发送到搜索端点的内容,但我认为无论如何它都应该有效。

谢谢

最佳答案

看起来“连字符”字段指向一个名为“pdh”的自定义分析器。我预计这是您示例中的一个拼写错误,因为创建索引应该会因此配置而失败,因为“pdh”不存在。请确认。

在大多数情况下,Azure 搜索会在查询时针对搜索词运行分析器。最显着的异常(exception)是当搜索词中存在通配符并且无法分析时。因此,如果使用分析器将数据标准化为小写,则该术语在查询时也应为小写。您可以将分析 API 与自定义分析器结合使用来查看术语的处理方式。 更多信息:https://learn.microsoft.com/en-us/rest/api/searchservice/test-analyzer

如果您可以分享,我很好奇您用于测试查询术语的内容以及索引中的内容。

希望这有帮助。

迈克

关于azure - 不区分大小写的 Azure 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51608275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com