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 以及是否有任何可搜索字段包含 TY0033BlockRef00DisiplineFABRIC。在您的情况下,所有字段都是可搜索的。因此:

forignId 匹配 tags 包含 SiteRef TY0033BlockRefDisiplineFABRIC 在标签字段中 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 对,例如:BlockRef00 例如,"BlockRef 00"~1