azure-cognitive-search - 如何在 Azure 搜索中处理多词/短语同义词
问题描述
根据文章https://azure.microsoft.com/pl-pl/blog/azure-search-synonyms-public-preview/我应该在 synonymMaps 中使用多词/短语同义词
多字同义词
在许多全文搜索引擎中,对同义词的支持仅限于单个词。我们的团队设计了一个解决方案,允许 Azure 搜索支持多词同义词。这允许短语查询(“”)在使用同义词时正常工作。如果有人将“热水浴缸”映射到“漩涡浴缸”,然后搜索“大热水浴缸”,Azure 搜索将返回同时包含“大热水浴缸”和“大漩涡浴缸”的匹配项。</p>
但是,就我而言,我在子词上得到了匹配。
我的 synonymMap 看起来像:
{"name":"map",
"format":"solr",
"synonyms":"Gastroenterology (acute and chronic),vomiting, diarrhoea, weight loss\n"}
我在搜索索引中有文档,其中包含胃肠病学(急性和慢性)等医学学科。
我收到?search="vomiting"
的是:
{
"@search.score": 1.0405536,
"@search.highlights": {
"disciplines/name": [
"<em>Acute</em> <em>and</em> <em>chronic</em> ear disease",
"<em>Acute</em> <em>and</em> <em>chronic</em> skin disease",
"<em>Gastroenterology</em> (<em>acute</em> <em>and</em> <em>chronic</em>)",
"Haematology (<em>acute</em> <em>and</em> <em>chronic</em>)",
"Respiratory medicine (<em>acute</em> <em>and</em> <em>chronic</em>)"
],
我期待:
{
"@search.score": 1.0405536,
"@search.highlights": {
"disciplines/services/translatedName": [
"<em>Gastroenterology (acute and chronic)</em>",
],
难道我做错了什么?
我试着把主要词剪成一个词,比如 Gastroenterology,但其中一些根本无法剪掉。提供类似的报价synonyms => "Gastroenterology (acute and chronic)"
也不起作用。
更新
我想知道为什么我认为有问题。好吧,我提供了:
{"name":"map",
"format":"solr",
"synonyms":"Gastroenterology (acute and chronic),vomiting, diarrhoea, weight loss\n"}
并实际使用:
{"name":"map",
"format":"solr",
"synonyms":"Gastroenterology (acute and chronic),vomiting, diarrhoea, weight loss
=> Gastroenterology (acute and chronic)\n"}
在那种情况下,我有 4 个结果:
"@odata.count": 4,
"value": [
{
"@search.score": 1.0137179,
"@search.highlights": {
"disciplines/services/translatedName": [
"<em>Acute</em> <em>and</em> <em>chronic</em> ear disease",
"<em>Acute</em> <em>and</em> <em>chronic</em> skin disease",
"<em>Gastroenterology</em> (<em>acute</em> <em>and</em> <em>chronic</em>)",
"Haematology (<em>acute</em> <em>and</em> <em>chronic</em>)",
"Respiratory medicine (<em>acute</em> <em>and</em> <em>chronic</em>)"
],
"equipment/translatedName": [
"Emergency <em>and</em> crictial care",
"In house skin <em>and</em> ear cyology"
],
"disciplines/translatedName": [
"Anaesthesia <em>and</em> analgesia",
"Emergency <em>and</em> critical care"
]
},
...
{
"@search.score": 0.33542877,
"@search.highlights": {
"disciplines/services/translatedName": [
"<em>Chronic</em> pain management"
],
"disciplines/translatedName": [
"Anaesthesia <em>and</em> analgesia"
]
},
...
{
"@search.score": 0.13757591,
"@search.highlights": {
"equipment/translatedName": [
"Emergency <em>and</em> crictial care"
],
"disciplines/translatedName": [
"Emergency <em>and</em> critical care"
]
},
...
{
"@search.score": 0.07112321,
"@search.highlights": {
"disciplines/services/translatedName": [
"<em>Chronic</em> pain management"
]
},
你能向我解释一下在这种情况下它是如何工作的吗?
解决方案
Azure 搜索确实支持多词同义词,并且您的案例中的结果符合预期。这里有几件事需要说明。
First?search="vomiting"
将返回与文档中任何位置的“呕吐”或指定同义词匹配的文档。Gastroenterology (acute and chronic)
集合中的多词同义词disciplines/name
匹配您的查询,从而返回文档。
第二件事可能是混乱的根源,是突出显示。Azure 搜索当前不支持短语突出显示。如果与短语查询一起使用,它会突出显示短语中的各个术语。由于匹配文档在其他地方也有单独的术语,所有这些都被突出显示。有关更多详细信息,请查看带有双引号的短语的 Azure 搜索亮点。
因此,多词同义词扩展和搜索按预期运行。您可以通过索引一个仅包含的测试文档Gastroenterology (acute and chronic)
和另一个仅包含acute and chronic
. 查询结果应该只返回第一个文档。
如果您对突出显示短语有严格要求,则必须在检索到搜索结果后进行一些客户端处理
推荐阅读
- php - 在 WooCommerce 中请求类别时获取“per_page 必须介于 1(含)和 100(含)之间”
- javascript - 将 Promise 与 resolve 并拒绝作为财产是否是一种反模式?为什么?
- flutter - 颤振版本解决失败
- javascript - 有没有更好的方法让谷歌地图工作?
- scala - Scala sbt -D 未找到环境变量
- weblogic - Peoplesoft 集成代理收到致命警报:protocol_version
- selenium - 下载了 chromeDriver 但我的 Visual Studio 代码仍然要求我下载 chromeDriver
- c# - .Net Core 应用程序未启动,显示未安装但已安装的错误
- xml - 下载 BLOB 文件时出现编码错误
- flutter - Snackbar 未在颤动中显示