Azure 搜索 Lucene 查询不正确的结果
Azure Search Lucene Query Incorrect Result
我目前正在使用 Azure 搜索根据用户传入的过滤器取回存储在 blob 存储中的图像。下面是我的 Azure 搜索,我认为它应该将标签字段中指定的所有内容过滤为 AND:
search=foreignId:d0c41422-acfa-4e4b-a9db-8c06b6860f3f, tags:SiteRef +\""TY0033"\" + BlockRef + \""00"\" + Disipline + \""FABRIC"\"&searchMode=all&queryType=full
及其返回的内容(从 BlockRef 可以看出这是错误的,但如果我通过 CN0001,它会返回正确的值):
"foreignId": "d0c41422-acfa-4e4b-a9db-8c06b6860f3f",
"description": "Health & Safety Eire - Site Photo - TY0033-01-
FABRIC-005",
"fileName": "TY0033-01-FABRIC-005",
"fileExtension": ".jpg",
"createdAt": "26/11/2018 02:00:24",
"tags": "[{\"TagName\":\"SiteRef\",\"Value\":\"TY0033\"},{\"TagName\":\"BlockRef\",\"Value\":\"01\"},{\"TagName\":\"Disipline\",\"Value\":\"FABRIC\"},{\"TagName\":\"PhotoNumber\",\"Value\":\"005\"}]",
"longitude": 0,
"latitude": 0
在 95% 的情况下,这一切都运行良好,但在另外 5% 的情况下,返回的图像不正确,因为 Azure 搜索提供了不正确的详细信息。
我查过了,好像是因为不尊重搜索词的多样性。我是 Azure 搜索的新手,所以我想知道我做的是否正确?
如有任何帮助,我们将不胜感激
索引定义:
Index Definition
编辑:更新 Post 索引定义
在您的查询中,您检查 foreignId
是否等于 d0c41422-acfa-4e4b-a9db-8c06b6860f3f
并且 tags
字段包含 SiteRef
以及是否有任何可搜索字段包含 TY0033
,BlockRef
、00
、Disipline
和 FABRIC
。在您的情况下,所有字段都是可搜索的。因此:
forignId
匹配
tags
包含 SiteRef
TY0033
、BlockRef
、Disipline
和 FABRIC
在标签字段中
00
在 createdAt 字段中,因为标准 Lucene 分析器将 "26/11/2018 02:00:24"
标记为 26,11,2018,02,00,24
为了在标签字段中搜索,您应该按如下方式重写您的查询:
search=foreignId:d0c41422-acfa-4e4b-a9db-8c06b6860f3f AND tags:(SiteRef AND \""TY0033"\" AND BlockRef AND \""00"\" AND Disipline AND \""FABRIC"\")&searchMode=all&queryType=full
可能值得使用 proximity search 来确保关联出现的 field/value 对,例如:BlockRef
和 00
例如,"BlockRef 00"~1
我目前正在使用 Azure 搜索根据用户传入的过滤器取回存储在 blob 存储中的图像。下面是我的 Azure 搜索,我认为它应该将标签字段中指定的所有内容过滤为 AND:
search=foreignId:d0c41422-acfa-4e4b-a9db-8c06b6860f3f, tags:SiteRef +\""TY0033"\" + BlockRef + \""00"\" + Disipline + \""FABRIC"\"&searchMode=all&queryType=full
及其返回的内容(从 BlockRef 可以看出这是错误的,但如果我通过 CN0001,它会返回正确的值):
"foreignId": "d0c41422-acfa-4e4b-a9db-8c06b6860f3f",
"description": "Health & Safety Eire - Site Photo - TY0033-01-
FABRIC-005",
"fileName": "TY0033-01-FABRIC-005",
"fileExtension": ".jpg",
"createdAt": "26/11/2018 02:00:24",
"tags": "[{\"TagName\":\"SiteRef\",\"Value\":\"TY0033\"},{\"TagName\":\"BlockRef\",\"Value\":\"01\"},{\"TagName\":\"Disipline\",\"Value\":\"FABRIC\"},{\"TagName\":\"PhotoNumber\",\"Value\":\"005\"}]",
"longitude": 0,
"latitude": 0
在 95% 的情况下,这一切都运行良好,但在另外 5% 的情况下,返回的图像不正确,因为 Azure 搜索提供了不正确的详细信息。
我查过了,好像是因为不尊重搜索词的多样性。我是 Azure 搜索的新手,所以我想知道我做的是否正确?
如有任何帮助,我们将不胜感激
索引定义:
Index Definition
编辑:更新 Post 索引定义
在您的查询中,您检查 foreignId
是否等于 d0c41422-acfa-4e4b-a9db-8c06b6860f3f
并且 tags
字段包含 SiteRef
以及是否有任何可搜索字段包含 TY0033
,BlockRef
、00
、Disipline
和 FABRIC
。在您的情况下,所有字段都是可搜索的。因此:
forignId
匹配
tags
包含 SiteRef
TY0033
、BlockRef
、Disipline
和 FABRIC
在标签字段中
00
在 createdAt 字段中,因为标准 Lucene 分析器将 "26/11/2018 02:00:24"
标记为 26,11,2018,02,00,24
为了在标签字段中搜索,您应该按如下方式重写您的查询:
search=foreignId:d0c41422-acfa-4e4b-a9db-8c06b6860f3f AND tags:(SiteRef AND \""TY0033"\" AND BlockRef AND \""00"\" AND Disipline AND \""FABRIC"\")&searchMode=all&queryType=full
可能值得使用 proximity search 来确保关联出现的 field/value 对,例如:BlockRef
和 00
例如,"BlockRef 00"~1