对我的弹性搜索数据库运行基本查询会产生不一致的结果。
我可以直接通过ID与数据库查询匹配
{
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": "84e042ce-74e3-4c51-a1d9-db2f1c3d57ef"
}
}
}
]
}
}
}
这将按预期返回一条记录(显示2个字段)
"id": "84e042ce-74e3-4c51-a1d9-db2f1c3d57ef",
"usersNotified": "e721a8d9-8001-4003-9af9-1c7397fd7079,fc18bbc4-f7f1-4151-bf88-390597da9510,061c9195-cb97-4777-8577-a8e555b95c7f,8e4e7641-b135-46e5-b9b4-c42393450108,601785e7-1c18-43b4-924e-cf52a15e3204,ec132f25-3d1d-41d8-ab16-e60a53ee9483"
当我向查询中添加match_phrase来查找“ usersNotified”字段中存在的Guid时,它又变空了。
{
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": "84e042ce-74e3-4c51-a1d9-db2f1c3d57ef"
}
}
},
{
"match_phrase": {
"usersNotified": {
"query": "601785e7-1c18-43b4-924e-cf52a15e3204"
}
}
}
]
}
}
}
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 20,
"successful": 20,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
对不同记录(和较短的usersNotified列表)的完全相同的查询确实成功返回了匹配项
{
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": "d48e6ccc-f343-4840-af29-317fef829da1"
}
}
},
{
"match_phrase": {
"usersNotified": {
"query": "601785e7-1c18-43b4-924e-cf52a15e3204"
}
}
}
]
}
}
}
如图所示:
"id": "d48e6ccc-f343-4840-af29-317fef829da1",
"usersNotified": "e721a8d9-8001-4003-9af9-1c7397fd7079,fdc40427-9db0-44d8-8ce3-45c90489dc19,061c9195-cb97-4777-8577-a8e555b95c7f,601785e7-1c18-43b4-924e-cf52a15e3204,ec132f25-3d1d-41d8-ab16-e60a53ee9483"
所以我不明白为什么相同的查询在一种情况下有效,而在另一种情况下却无效。任何帮助将不胜感激。
答案 0 :(得分:0)
所以我想我已经解决了这个问题,但是我无法对其进行完整的测试(并且无法进行两次冲刺……所以我想我会用自己的能力进行更新)。
我认为我在该字段的UID上不匹配的原因是,为该字段定义的标准分析器正在使用基于语言的算法进行分析,并将GUID中的破折号视为连字符并将其从考虑中删除。
我仍然不明白为什么它有时会匹配,而另一些时候却不匹配,但是按照这个SO article,我能够重新扫描一个小的子集并获得所需的结果。
本质上,我创建了一个自定义分析器,该分析器将该字段标记为逗号分隔的列表。然后,我替换了
{
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": "d48e6ccc-f343-4840-af29-317fef829da1"
}
}
},
{
"match_phrase": {
"usersNotified": {
"query": "601785e7-1c18-43b4-924e-cf52a15e3204"
}
}
}
]
}
}
与
{
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": "d48e6ccc-f343-4840-af29-317fef829da1"
}
}
},
{
"term": {
"userssNotified": {
"value": "601785e7-1c18-43b4-924e-cf52a15e3204"
}
}
}
]
}
}
它奏效了。稍后,我将有机会尝试使用完整的数据集(需要进行完整的重新扫描),以确保其有效。