通过另一个字段过滤elasticsearch中的multi_match查询

时间:2014-05-13 22:13:41

标签: ruby-on-rails elasticsearch

我正在尝试使用ElasticSearch执行搜索,该搜索必须匹配部分索引中的某些搜索字词,但仅适用于属于某些项目的部分,即当前用户可以访问的项目。

所以我正在尝试对查询应用过滤器,以便它将过滤那些将project_id包含在一小组2或3个不同值中的部分。如果某个部分的project_id属于有效的project_id,则应该包含它。否则就不会。

这都是使用elasticsearch-model gem的rails api的上下文。

这是我传入的查询。它假装过滤部分,因此只有项目2和5中的部分包含在结果中。

{
  "query": {
    "filtered": {
      "query": {
        "multi_match": {
          "query": "search terms here",
          "type": "cross_fields",
          "fields": ["title^3", "contents"],
          "operator": "and"
        }
      },
      "filter": {
        "or": {
          "filters": [
            { "exists": { "project_id": 2 } },
            { "exists": { "project_id": 5 } }
          ]
        }
      }
    }
  }
}

我收到了这个错误:

QueryParsingException[[sections] [exists] filter does not support [project_id]]

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

现有过滤器意味着检查字段是否存在。refer

获得你想要达到的目标。

 {
 "query": {
  "filtered": {
     "query": {
        "multi_match": {
           "query": "search terms here",
           "type": "cross_fields",
           "fields": [
              "title^3",
              "contents"
           ],
           "operator": "and"
        }
     },
     "filter": {
        "terms": {
           "project_id": ["1","2"]
        }
      }
    }
  }
}

它有帮助......!