我使用 Azure 搜索服务和 Cosmos DB 作为数据源,以在 Nodejs 应用程序中启用搜索功能。在一个用例中,我需要显示从 azure 搜索 API 获取的每个文档的相似度百分比(至 100%)。 例如:
API : https://name.search.windows.net/indexes/dbname/docs/search?api-version=2016-09-01
Payload: {
"search" : "This is a test key for search service",
"searchFields":"title, description",
"searchMode":"all",
"count":true
}
Response : "@odata.count": 2,
"value": [
{
"@search.score": 4.190574,// convert to ~70%(assumption) similarity
"title": "search service",
"description": "The Search Service test key provides extensive capabilities for search engine-like querying"
...},
{"@search.score": 3.9293563,// convert to ~40%(assumption) similarity
"title": "test key",
"description": " test measures your ability to enter groups of numbers using the numeric ten-key pad"
...}]
有什么方法可以根据与搜索键的相似度将@search.score转换为doc1 - 70%和doc2 -40%?我通读了有关使用评分配置文件和使用不同的搜索 API 算法的文档。据我了解,分数是根据指标得出的,没有具体的分数范围。但是,如果可以进行任何类型的转换那就太好了,或者我是否需要考虑另一种方法?帮助将不胜感激:)
最佳答案
相关性分数大多是抽象的 - 就 Azure 搜索而言,分数表示搜索词在文档中出现的频率(对罕见单词有一些综合偏差,并使用考虑长度的公式)文档)。分数越高意味着“文档中出现的搜索词越多”。在您的场景中,百分比意味着什么?例如,100% 意味着什么?还是50%?
如果您只想显示百分比而不是分数,同时保持相同的排名,您可以将所有分数除以最高分数(这样每个请求的顶部文档的得分始终为 100%,而其他文档的分数递减)百分比)。但是,这仍然不允许您比较不同请求之间的文档分数。
关于node.js - 根据 azure 搜索的分数计算相似度百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72939874/