奇怪的输出查询弹性搜索

时间:2017-09-11 09:52:32

标签: firebase elasticsearch

我刚开始使用弹性搜索。我已经正确设置了所有设置。我正在使用Firebase + Flashlight +弹性搜索。

在我的前端,我正在根据不同的搜索参数构建查询。我将它们插入Firebase /search/requests/中的节点。手电筒会选择它并将响应放入/search/response,这就像一个魅力!

但是,我不确定如何正确编写查询。当我尝试合并两个must match个查询时,我得到了奇怪的结果。我正在使用查询DSL。

我在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"
          }
        }
      ]
    }
  }
}

在我的输出中,我还获得了那些没有这两个字段的文档?他们的得分也很低。这是正常的吗?

我的映射,使用Flashlight自动创建

enter image description here

更新1

我刚尝试了这个查询,但是由于没有对这两个字段进行过滤,它仍然给我带来了奇怪的结果:

   {
   "query": {
      "bool": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "match": {
                        "programmes.code": "890000"
                     }
                  },
                  {
                     "match": {
                        "createdBy": "admin@xx.org"
                     }
                  }
               ]
            }
         }
      }
   }
}

1 个答案:

答案 0 :(得分:2)

must中使用的bool query子句在查询上下文中执行(所有文档按得分的降序返回)并有助于得分。 see link

如果您希望将其作为过滤器执行,请使用以下查询:

{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "match": {
                "createdBy": "xx@company.org"
              }
            },
            {
              "match": {
                "programmes.code": "95000"
              }
            }
          ]
        }
      }
    }
  }
}

注意:

默认情况下,分析字符串字段,将字符串字段的映射更新为not_analyzed,以使用filter查询。请参阅:mapping-intro