elasticsearch,Firebase,elasticsearch" /> elasticsearch,Firebase,elasticsearch" />

Firebase 奇怪的输出查询弹性搜索

Firebase 奇怪的输出查询弹性搜索,firebase,elasticsearch,Firebase,elasticsearch,我刚开始使用弹性搜索。我把一切都安排好了。我正在使用Firebase++弹性搜索 在我的前端,我基于不同的搜索参数构建查询。我将它们插入Firebase/search/requests/中的一个节点。手电筒将拾取此信息并将响应放入/search/response,这就像一个符咒 但是,我不确定如何正确编写查询。当我尝试组合两个必须匹配查询时,得到了奇怪的结果。我正在使用查询DSL 我在可交付成果/doc下弹性搜索的文档具有以下方案 ... { "createdBy" : "admin@xx.

我刚开始使用弹性搜索。我把一切都安排好了。我正在使用Firebase++弹性搜索

在我的前端,我基于不同的搜索参数构建查询。我将它们插入Firebase
/search/requests/
中的一个节点。手电筒将拾取此信息并将响应放入
/search/response
,这就像一个符咒

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

我在
可交付成果/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,
},
...
在我的输出中,我也得到了没有这两个字段的文档?他们的分数也很低。这正常吗

我的贴图,使用闪光灯自动创建

更新1


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

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

bool查询
中使用的
must
子句在查询上下文中执行(所有文档按分数降序返回),并对分数作出贡献

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

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


默认情况下,字符串字段已分析,请将字符串字段的映射更新为
未分析
,以使用
过滤器
查询。请参阅:

我刚刚尝试了这个查询,但是由于没有对两个字段进行过滤,它仍然会给我奇怪的结果。请参阅start postOne修改中的更新。您可以做的是将
match
替换为
term
,这样它就不会分析字段。如果将
match
替换为
term
我会得到零结果吗?如果我过滤
节目.code
它会工作。但不知何故,与
程序.code
createdBy
(与其他组合相同)的组合不起作用。组合不起作用意味着没有同时满足这两个条件的文档。请注意,
must
执行布尔值
,您可能正在查找的是一个
should
子句,如果满足任何一个条件,该子句将返回。问题在于映射。默认情况下,将分析字符串字段。因此你会得到奇怪的结果。如果将这些字段的映射更新为“未分析”,则可以使用筛选器查询来获得正确的结果。查看此项了解更多详细信息:
{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "match": {
                "createdBy": "xx@company.org"
              }
            },
            {
              "match": {
                "programmes.code": "95000"
              }
            }
          ]
        }
      }
    }
  }
}