Azure 搜索:如何确保所有性别和复数的组合都包含在我的结果中?
Azure Search: How do I ensure all combinations of gender and plurality are included in my results?
我面临一个法语网站的业务需求,该网站需要匹配 masculine/feminine/singular 和单词的复数版本。描述这一点的最简单方法是在这个问题中显示需求本身。
请求 1 - 搜索 chien (masculine/singular)
搜索结果中应包含以下字词:
- 钱 (masculine/singular)
- 中国 (masculine/plural)
- 谢娜 (feminine/singular)
- 中国 (feminine/plural)
当我研究这个需求时,我使用 Analyze API with "fr.microsoft" 分析器来快速测试各种场景。
请求 #1
{
"analyzer": "fr.microsoft",
"text": "chien"
}
回复#1
- 钱
请求#2
{
"analyzer": "fr.microsoft",
"text": "chiens"
}
回复 #2
- 钱
- 中国人
请求 #3
{
"analyzer": "fr.microsoft",
"text": "chienne"
}
回复#3
- 钱
- 钱纳
- 谢娜
请求 #4
{
"analyzer": "fr.microsoft",
"text": "chiennes"
}
回复#4
- 钱
- 钱纳
- 谢讷
请求 2 - 搜索讲师 (masculine/singular)
搜索结果中应包含以下字词:
- 讲师 (masculine/singular)
- 讲师 (masculine/plural)
- 电饭煲 (feminine/singular)
- 讲座 (feminine/plural)
我再次使用 Analyze API with "fr.microsoft" 分析器来快速测试各种场景。
请求 #1
{
"analyzer": "fr.microsoft",
"text": "lecteur"
}
回复#1
- 讲师
请求#2
{
"analyzer": "fr.microsoft",
"text": "chiens"
}
回复 #2
- 讲师
- 讲师
请求 #3
{
"analyzer": "fr.microsoft",
"text": "lectrice"
}
回复#3
- 讲师
- 电饭锅
请求 #4
{
"analyzer": "fr.microsoft",
"text": "lectrices"
}
回复#4
- 讲师
- 讲座
我的感受和问题
我最初的印象是搜索 "chiennes" 不会匹配包含 "chienne" 的文档,因为 "chiennes" 仅细分为以下内容:chien, chienner,香奈儿.
这种印象正确吗?或者搜索 "chiennes" 仍然 return 包含 "chienne" 的文档,因为搜索词 "chiennes" 被标记为 chien,chienner,chiennes,而文档本身将 "chienne" 标记化为 chien,chienner,chienne,所以最终会是一场比赛。请注意,我 斜体 我认为匹配的搜索和索引标记。
请注意,上面的 2 个示例要求实际上可能最终成为我的女性与女性 S.O 的重复。我今天早些时候发布的问题:
要求示例 3 - 搜索 MELEE
搜索结果中应包含以下字词:
- 近战
- MÊLEE
- 混战
- 美兰
- 混战
- mêlé
- mELer
请求 #1
{
"analyzer": "fr.microsoft",
"text": "MELEE"
}
回复#1
- 混战
请求#2
{
"analyzer": "fr.microsoft",
"text": "MÊLEE"
}
回复 #2
- 混战
- 混战
请求 #3
{
"analyzer": "fr.microsoft",
"text": "Mêlée"
}
回复#3
- 梅勒
- 梅勒
- 梅勒
- mêle
- 混战
- 混战
请求 #3
{
"analyzer": "fr.microsoft",
"text": "mêlant"
}
回复#3
- 梅勒
- 梅勒
- 混色
- 美兰
在此示例中,我可以继续分析 API 调用,但在这里我可以与现有网站(我们需要重现其功能)和新网站进行比较。现有网站允许我搜索 "melee",它会找到带有 "mêlant" 的文档。 Screenshot of existing website
但是根据 Analyze API 的结果,我可以看到搜索 "melee" 不会找到 "mêlant" 因为 "melee" 只会被标记化为 "melee" 而 "mêlant" 仅被标记为 meler、mêler、melant 和 mêlant。这里没有匹配项。
我的感受和问题
- 我用Google翻译可以看出"melee"的意思是"scrimmage"或者"brawl".
- 我用Google翻译可以看出"mêlant"的意思是"mixing".
- 这就是搜索 "melee" 与 "mêlant" 不匹配的原因吗?
- 如果业务需求匹配,我有哪些选择?我必须使用同义词吗?如果没有,我的选择是什么?
- 请注意,现有网站使用 SOLR,我们无权访问任何现有代码或 SOLR 的使用方式。我们不得不对所有内容进行逆向工程。
- 我确实设法获得了 SOLR 配置,看起来这就是他们当前的 SOLR 配置为法语设置的方式。看起来他们使用某种字典。
请指教
我想我已经回答了你另一个 post 中的第一个和第二个要求:,如果我遗漏了什么,请告诉我。
关于第三个要求,我怀疑发生的情况是您所指的网站使用了激进的词干提取策略。这意味着 melee 或 mêlant 这两个词都归结为同一个词根。在词干提取之上,他们可能使用模糊搜索或其他查询扩展方法,如同义词扩展。问题是您是否希望带有 mêlant 的文档与单词 melee 匹配,前提是它们表示不同的意思。
Azure 搜索中可以进行模糊搜索和同义词扩展。您还可以尝试使用 custom analyzers 来控制词干提取的方式。我们使用的 Lucene 组件与 SOLR 中使用的组件相同,因此在大多数情况下您应该能够复制相同的分析器配置。
希望对您有所帮助。
我面临一个法语网站的业务需求,该网站需要匹配 masculine/feminine/singular 和单词的复数版本。描述这一点的最简单方法是在这个问题中显示需求本身。
请求 1 - 搜索 chien (masculine/singular)
搜索结果中应包含以下字词:
- 钱 (masculine/singular)
- 中国 (masculine/plural)
- 谢娜 (feminine/singular)
- 中国 (feminine/plural)
当我研究这个需求时,我使用 Analyze API with "fr.microsoft" 分析器来快速测试各种场景。
请求 #1
{ "analyzer": "fr.microsoft", "text": "chien" }
回复#1
- 钱
请求#2
{ "analyzer": "fr.microsoft", "text": "chiens" }
回复 #2
- 钱
- 中国人
请求 #3
{ "analyzer": "fr.microsoft", "text": "chienne" }
回复#3
- 钱
- 钱纳
- 谢娜
请求 #4
{ "analyzer": "fr.microsoft", "text": "chiennes" }
回复#4
- 钱
- 钱纳
- 谢讷
请求 2 - 搜索讲师 (masculine/singular)
搜索结果中应包含以下字词:
- 讲师 (masculine/singular)
- 讲师 (masculine/plural)
- 电饭煲 (feminine/singular)
- 讲座 (feminine/plural)
我再次使用 Analyze API with "fr.microsoft" 分析器来快速测试各种场景。
请求 #1
{ "analyzer": "fr.microsoft", "text": "lecteur" }
回复#1
- 讲师
请求#2
{ "analyzer": "fr.microsoft", "text": "chiens" }
回复 #2
- 讲师
- 讲师
请求 #3
{ "analyzer": "fr.microsoft", "text": "lectrice" }
回复#3
- 讲师
- 电饭锅
请求 #4
{ "analyzer": "fr.microsoft", "text": "lectrices" }
回复#4
- 讲师
- 讲座
我的感受和问题
我最初的印象是搜索 "chiennes" 不会匹配包含 "chienne" 的文档,因为 "chiennes" 仅细分为以下内容:chien, chienner,香奈儿.
这种印象正确吗?或者搜索 "chiennes" 仍然 return 包含 "chienne" 的文档,因为搜索词 "chiennes" 被标记为 chien,chienner,chiennes,而文档本身将 "chienne" 标记化为 chien,chienner,chienne,所以最终会是一场比赛。请注意,我 斜体 我认为匹配的搜索和索引标记。
请注意,上面的 2 个示例要求实际上可能最终成为我的女性与女性 S.O 的重复。我今天早些时候发布的问题:
要求示例 3 - 搜索 MELEE
搜索结果中应包含以下字词:
- 近战
- MÊLEE
- 混战
- 美兰
- 混战
- mêlé
- mELer
请求 #1
{ "analyzer": "fr.microsoft", "text": "MELEE" }
回复#1
- 混战
请求#2
{ "analyzer": "fr.microsoft", "text": "MÊLEE" }
回复 #2
- 混战
- 混战
请求 #3
{ "analyzer": "fr.microsoft", "text": "Mêlée" }
回复#3
- 梅勒
- 梅勒
- 梅勒
- mêle
- 混战
- 混战
请求 #3
{ "analyzer": "fr.microsoft", "text": "mêlant" }
回复#3
- 梅勒
- 梅勒
- 混色
- 美兰
在此示例中,我可以继续分析 API 调用,但在这里我可以与现有网站(我们需要重现其功能)和新网站进行比较。现有网站允许我搜索 "melee",它会找到带有 "mêlant" 的文档。 Screenshot of existing website
但是根据 Analyze API 的结果,我可以看到搜索 "melee" 不会找到 "mêlant" 因为 "melee" 只会被标记化为 "melee" 而 "mêlant" 仅被标记为 meler、mêler、melant 和 mêlant。这里没有匹配项。
我的感受和问题
- 我用Google翻译可以看出"melee"的意思是"scrimmage"或者"brawl".
- 我用Google翻译可以看出"mêlant"的意思是"mixing".
- 这就是搜索 "melee" 与 "mêlant" 不匹配的原因吗?
- 如果业务需求匹配,我有哪些选择?我必须使用同义词吗?如果没有,我的选择是什么?
- 请注意,现有网站使用 SOLR,我们无权访问任何现有代码或 SOLR 的使用方式。我们不得不对所有内容进行逆向工程。
- 我确实设法获得了 SOLR 配置,看起来这就是他们当前的 SOLR 配置为法语设置的方式。看起来他们使用某种字典。
请指教
我想我已经回答了你另一个 post 中的第一个和第二个要求:
关于第三个要求,我怀疑发生的情况是您所指的网站使用了激进的词干提取策略。这意味着 melee 或 mêlant 这两个词都归结为同一个词根。在词干提取之上,他们可能使用模糊搜索或其他查询扩展方法,如同义词扩展。问题是您是否希望带有 mêlant 的文档与单词 melee 匹配,前提是它们表示不同的意思。
Azure 搜索中可以进行模糊搜索和同义词扩展。您还可以尝试使用 custom analyzers 来控制词干提取的方式。我们使用的 Lucene 组件与 SOLR 中使用的组件相同,因此在大多数情况下您应该能够复制相同的分析器配置。
希望对您有所帮助。