返回Elasticsearch数组

时间:2016-06-03 21:48:02

标签: elasticsearch aggregation

我正在完善Elasticsearch搜索并遇到问题。作为参考,我有一组文件,每个文件都有以下字段:

"成分" :[成分1,成分2,成分3]

我想做的一个例子:

在我的文档中搜索所有带有'糖的文件。列于成分中;然后,返回所有含有“牛奶”字样的成分。'

通过汇总(下面的代码),我能够从所有文件中找到所有不同的成分,其中包括#34;成分"含有糖。'但是,我不知道如何进一步过滤这些结果 - 我尝试在聚合中使用后置过滤器和过滤器无济于事。

如果有人能帮助我,我们将不胜感激!

{
  "query": {
    "filtered": {
      "filter": {
        "term": {
          "ingredients": {
          "value": "Sugar"
          }
        }
      }
    }
  },
  "fields": [ 
    "ingredients"
  ],
  "size" : 0, 
  "aggs": {
        "Ingreds": {
          "terms": {
            "field": "ingredients",
            "size": 50,
          }
        }
  }
}

而且,这是映射:

{
  "recipe_cookbook": {
    "mappings": {
      "searchable-recipes": {
        "properties": {
          "recipe": {
            "properties": {
              "ingredients": {
                "type": "string",
                "index": "not_analyzed",
                "doc_values": false
              }
            }
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

为什么不尝试这样的事情?

{
  "query": {
    "filtered": {
      "filter": {
          "bool": {
            "must": [
               {
                   "term": {
                      "ingredients": "Sugar"
                   }
               },
               {
                   "term": {
                      "ingredients": "milk"
                   }
               }
            ]
          }
      }
    }
  },
  "fields": [ 
    "ingredients"
  ],
  "size" : 0, 
  "aggs": {
        "Ingreds": {
          "terms": {
            "field": "ingredients",
            "size": 50
          }
        }
  }
}