【发布时间】:2017-09-11 09:52:31
【问题描述】:
我刚开始使用 Elastic Search。我已经正确设置了所有内容。我正在使用 Firebase + Flashlight + 弹性搜索。
在我的前端,我根据不同的搜索参数构建查询。我将它们插入到 Firebase /search/requests/ 中的一个节点中。手电筒会捡起这个并将回复放入/search/response,这就像一个魅力!
但是,我不确定如何正确编写查询。当我尝试合并两个 must match 查询时,我得到了奇怪的结果。我正在使用查询 DSL。
我在 Elastic Search 中 deliverables/doc 下的文档具有以下方案。
...
{
"createdBy" : "admin@xx.org",
"createdOn" : 1501200000000,
"deadLine" : 1508716800000,
"description" : {
"value" : "dummy description"
},
"key" : "<FBKEY>",
"programmes" : [ {
"code" : "95000",
"name" : "Test programme",
"programYear" : 2017
} ],
"projects" : [ {
"projectCode" : "113200",
"projectName" : "Test project",
"projectYear" : 2017
} ],
"reportingYear" : 2017,
"status" : "Open",
"type" : "writing",
"updatedBy" : "admin@xx.org",
"updatedOn" : 1501200000000,
},
...
我的查询具有以下结构。
{
"query": {
"bool": {
"must": [
{
"match": {
"createdBy": "xx@company.org"
},
"match": {
"programmes.code": "95000"
}
}
]
}
}
}
在我的输出中,我还得到了不完全包含这两个字段的文档?他们的分数也很低。这正常吗?
我的地图,使用手电筒自动创建
更新 1
我刚刚尝试了这个查询,但是由于没有过滤两个字段,它仍然给了我奇怪的结果:
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"match": {
"programmes.code": "890000"
}
},
{
"match": {
"createdBy": "admin@xx.org"
}
}
]
}
}
}
}
}
【问题讨论】: