弹性搜索“过滤器”查询不起作用

时间:2019-08-10 04:49:35

标签: node.js reactjs elasticsearch

我一直在尝试查找与查询'abc'相匹配的条目,并从multi_match返回的所有那些条目中,我需要根据包含给定business_id的条目(其中business_id是字段之一)的条目来过滤条目。

我尝试使用以下查询,但是即使有一条记录同时满足must和filter查询,也没有从搜索返回任何记录。 问题出在过滤器查询中,因为当我评论它时,它根据需要获得了multi_match返回的2条记录,现在我想根据business_id过滤这些记录,因此最终应该只获得一条记录,但过滤器查询不起作用。

GET customer/_search
{
              "query": {
                  "bool": {
                      "must": {
                          "dis_max": {
                              "queries":
                                  {
                                      "multi_match": {
                                          "query": "abc",
                                          "type": "phrase_prefix",
                                          "fields": ["first_name", "last_name", "email", "city", "state", "zip", "country"]
                                      }
                                  }
                          }
                      },
                      "filter": {
                          "term": {
                              "business_id": business_id
                          }
                      }
                  }
              }
          }

Here is how my records in index looks like

2 个答案:

答案 0 :(得分:0)

为了调试此问题,我建议您仅在查询中的must部分进行搜索,以确保获得所需的结果,然后仅对{{1} }部分。

您希望看到的是,在这两个查询上都将获得期望的文档。我相信其中之一不应该返回您期望的文档,然后您可以尝试了解原因(并在需要时更新问题)。

如果filtermust都返回了您期望的文档,则上述查询应该可以正常工作。另外,如果那行不通,请添加您希望收到的文档

答案 1 :(得分:0)

GET customer/_search
{
              "query": {
                  "bool": {
                      "must": {
                          "dis_max": {
                              "queries":
                                  {
                                      "multi_match": {
                                          "query": "abc",
                                          "type": "phrase_prefix",
                                          "fields": ["first_name", "last_name", "email", "city", "state", "zip", "country"]
                                      }
                                  }
                          }
                      },
                      "filter": {
                          "match": {
                              "business_id": business_id
                          }
                      }
                  }
              }
          }

我的问题的解决方案。现在,过滤查询工作正常,因为我已将term替换为match