我的问题是,当我们使用模糊搜索(名字上两个字符的距离)进行名字搜索时,似乎并没有带回所有可能性。
QueryType已满
QueryString-“名字:gra〜2 AND(姓:\” ***** \“或姓:/.* \” ***** \“。* /)”
在此示例中,我使用的是完全匹配项或姓氏上的包含项,因此在示例中这将保持不变
结果:
如果我在Azure搜索查询字符串中搜索FirstName:gre〜2,则会返回:
Greg
加里
基因
如果我搜索名字:gra〜2,我们会回来:
吉娜
加里
如果我搜索名字:grag〜2,我们会回来:
Greg
加里
我们知道,天蓝色模糊搜索使用的是damerau-levenshtein距离,并且从“ gra”看来,“ gina”和“ greg”似乎有2个字符的差异,但只有一个出现。理论上,“ grag”也应返回“ gina”
我想知道是否有人对此有一个解释,因为它似乎不一致
我用它来验证字符串“ gra”和“ greg”&“ gina”之间的“距离”
http://fuzzy-string.com/Compare/
以下是Lucene语法上的Azure文档的链接
https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax
这些都是字段定义
{
"name": "FirstName",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"synonymMaps": []
},
{
"name": "LastName",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"synonymMaps": []
}
**无论是否使用姓氏,结果似乎都是相同的
答案 0 :(得分:0)
我还希望这些术语与您的模糊查询相匹配。只是在进行深入研究之前进行完整性检查,您能否确认分析仪的设置是什么(在查询时间和索引时间)?我只想确认您提到的所有术语实际上都是按您期望的方式进行标记化和索引化的(以及它们的大小写是否按您期望的方式标准化)。您可以使用Analyze API(https://docs.microsoft.com/en-us/rest/api/searchservice/test-analyzer)来确认这些术语的标记方式。您还提到查询中包含与另一个字段(LastName)匹配的AND子句,是否可以确认即使没有第二个子句,FirstName上的结果仍然不是您期望的结果?我只想确保我们消除了实际编辑距离算法之外的所有外部因素。
更新:我使用默认的分析器,没有LastName子句,尝试了这一步。搜索“ gra〜2”成功返回“ Greg”,“ Gary”和“ Gina”。当搜索“ gre〜2”时,我得到的结果相同(与您一样)。搜索“ grag〜2”仅返回“ Greg”和“ Gary”。 “ Gina”未返回,但对我来说似乎是预期的(编辑距离似乎为3)。