search.ismatch 仅与搜索中的第一个字母匹配

问题描述 投票:0回答:1

我有一个azure认知搜索索引,我正在使用search.ismatch ODATA全文搜索功能来返回与特定关键作品匹配的记录。

数据

  • 苹果

  • 菠萝

    search.ismatch('苹果', '文本')

我期望查询返回两个值,但我只得到 1。即它只匹配单词中的第一个字母。

无论搜索文本在数据中的哪个位置,如何返回数据?

odata azure-cognitive-services azure-cognitive-search azure-search-.net-sdk
1个回答
0
投票

基于文本子字符串进行搜索的一种可能的解决方案是在索引中使用

ngarm tokenizer
schema

index_definition = {
    "name": index_name,
    "fields": [
        {"name": "id", "type": "Edm.String", "key": True, "searchable": False},
        {
            "name": "Text",
            "type": "Edm.String",
            "searchable": True,
            "analyzer": "custom_analyzer",
        },
    ],
    "analyzers": [
        {
            "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
            "name": "custom_analyzer",
            "tokenizer": "custom_tokenizer",
            "tokenFilters": ["lowercase"],
        }
    ],
    "tokenizers": [
        {
            "@odata.type": "#Microsoft.Azure.Search.NGramTokenizer",
            "name": "custom_tokenizer",
            "minGram": 5,
            "maxGram": 5,
        }
    ],
}

通过上述架构,我已经上传了给定的示例数据:

documents = [
    {"@search.action": "upload", "id": "1", "Text": "apple"},
    {"@search.action": "upload", "id": "2", "Text": "pineapple"},
]

有了上面的索引定义和数据,我就能够得到所需的结果。 enter image description here

注意: 这是演示示例代码,您可能需要根据您的需求进行修改和重新配置。

有关部分搜索的更多详细信息,您可以查看此文档。

© www.soinside.com 2019 - 2024. All rights reserved.