azure搜索与文件名完全匹配但未返回准确结果



我正在将所有文件名索引到索引中。但当我在搜索查询中使用确切的文件名进行搜索时,它也会返回所有其他文件名。下面是我的索引定义。

{
"fields": [
{
"name": "id",
"type": "Edm.String",
"facetable": true,
"filterable": true,
"key": true,
"retrievable": true,
"searchable": false,
"sortable": false,
"analyzer": null,
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
},
{
"name": "FileName",
"type": "Edm.String",
"facetable": false,
"filterable": false,
"key": false,
"retrievable": true,
"searchable": true,
"sortable": false,
"analyzer": "keyword-analyzer",
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
}
],
"scoringProfiles": [],
"defaultScoringProfile": null,
"corsOptions": null,
"analyzers": [
{
"name": "keyword-analyzer",
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters": [],
"tokenizer": "keyword_v2",
"tokenFilters": ["lowercase", "my_asciifolding", "my_word_delimiter"]
}
],
"tokenFilters": [
{
"@odata.type": "#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
"name": "my_asciifolding",
"preserveOriginal": true
},
{
"@odata.type": "#Microsoft.Azure.Search.WordDelimiterTokenFilter",
"name": "my_word_delimiter",
"generateWordParts": true,
"generateNumberParts": false,
"catenateWords": false,
"catenateNumbers": false,
"catenateAll": false,
"splitOnCaseChange": true,
"preserveOriginal": true,
"splitOnNumerics": true,
"stemEnglishPossessive": false,
"protectedWords": []
}
],
"@odata.etag": ""0x8D6FB2F498F9AD2""
}

以下是我的样本数据

{
"value": [
{         
"id": "1",
"FileName": "SamplePSDFile_1psd2680.psd"
},
{  
"id": "2",
"FileName": "SamplePSDFile-1psd260.psd"
}, 
{  
"id": "3",
"FileName": "SamplePSDFile_1psd2689.psd"
}, 
{  
"id": "4",  
"FileName": "SamplePSDFile-1psdxx2680.psd"
}
]  
}

以下是分析API结果

{    
"tokens": [
{
"token": "samplepsdfile_1psd2689.psd",
"startOffset": 0,
"endOffset": 26,
"position": 0
},
{
"token": "samplepsdfile",
"startOffset": 0,
"endOffset": 13,
"position": 0
},
{
"token": "psd",
"startOffset": 15,
"endOffset": 18,
"position": 1
},
{
"token": "psd",
"startOffset": 23,
"endOffset": 26,
"position": 2
}
]
}

当我使用关键字"SamplePSDFile_1psd2689.psd"进行搜索时,Azure搜索在结果中返回三条记录,而不是仅返回文档3。下面是我的搜索查询和结果。

?search="SamplePSDFile_1psd2689.psd"&api-version=2019-05-06&$count=true&queryType=full&searchMode=All
{   
"@odata.count": 3,
"value": [
{
"@search.score": 2.3387241,
"id": "2",
"FileName": "SamplePSDFile-1psd260.psd"
},
{
"@search.score": 2.2493405,
"id": "3",
"FileName": "SamplePSDFile_1psd2689.psd"
},
{
"@search.score": 2.2493405,
"id": "1",
"FileName": "SamplePSDFile_1psd2680.psd"
}
]
}

我如何才能达到预期的结果。我尝试了在关键字周围加双引号和不加双引号的所有其他选项,但没有成功。在这种情况下,我做错了什么?

一些机构建议使用$filter,但在我们的案例中,该字段是不可过滤的。

请帮我一下。

如果您正在寻找完全匹配,那么您可能不希望涉及任何分析器。试试这条

"analyzer": "keyword-analyzer"

更改为

"analyzer": null

如果你需要能够在字段上进行精确匹配,并支持部分关键字搜索,那么你需要用不同的名称对字段进行两次索引。也许在完全匹配的字段名后面加上"Exact",而不使用分析器。没有确切名称的名称可以有分析器。然后根据搜索类型,使用右侧字段名称索引对字段进行搜索。

最新更新