首页 > 解决方案 > 针对不同类别的弹性搜索过滤器

问题描述

我用三个字段做了一个简单的映射,我正在分析一个字段是文本类型,其他字段是关键字类型。例子

fields: Category_one, Category_two, Category_three. 

现在我正在搜索文件。

Get _search/cat
    {
    "size": 4,
      "query": {
        "match": {
          "Category_one.ngrams": {
            "query": "Nice food place in XYZ location",
            "analyzer": "standard"
          }
        },
        "aggs":{
            "distincr_values":{
                "terms": {
                    "fields" : "Category_two"
                }
            }
        }
      }
    }

它显示了这个错误

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "[match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
                "line": 10,
                "col": 5
            }
        ],
        "type": "parsing_exception",
        "reason": "[match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
        "line": 10,
        "col": 5
    },
    "status": 400
}

请帮我解决这个错误。我的主要动机是根据Category_two领域找到不同的搜索。

任何帮助,将不胜感激。

标签: jsonelasticsearchelasticsearch-5

解决方案


我相信由于您的查询结构,您会收到此错误。您的聚合关键字必须在查询之外(与查询相同级别)。目前,您的 aggs 已包含在查询中。

按照这个结构:

Get _search/cat
    {
    "size": 4,
      "query": {
             'query goes here'
       },
       "aggs":{
           'aggregation go here' 
      }
    }

推荐阅读