首页 > 解决方案 > 弹性搜索“过滤器”查询不起作用

问题描述

我一直在尝试找出与查询“abc”匹配的条目,并且从 multi_match 返回的所有条目中,我需要根据包含给定 business_id 的条目过滤条目,其中 business_id 是字段之一。

我尝试了以下查询,但即使有一条记录同时满足必须和过滤查询,也没有从搜索中返回任何记录。问题出在过滤器查询中,因为当我评论它时,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
                          }
                      }
                  }
              }
          }

这是我在索引中的记录的样子

标签: node.jsreactjselasticsearch

解决方案


为了调试这个,我建议你只搜索must查询中的部分,看看你得到了你期望的结果,然后只对filter部分做同样的事情。

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

如果两者都must返回filter您期望的文档,那么上述查询应该可以正常工作。此外,如果这不起作用,请添加您希望收到的文档


推荐阅读