根据elasticsearch

时间:2016-08-03 06:48:39

标签: elasticsearch

我在弹性搜索中有一个类型的下面的映射:

"properties": {
    "userid": {
      "type": "integer"
    },
    "engid": {
      "type": "short"
    },
    "score": {
      "type": "short",
    },
    "name": {
      "type": "string",
      "index": "not_analyzed"
    },
    "submitTime": {
      "type": "date",
      "format": "yyyy-MM-dd HH:mm:ss"
    }

}

我的搜索查询为:

{
  "size": 10,
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "range": {
          "submitTime": {
            "gt": "now-18d"
          }
        }
      }
    }
  },
  "aggs": {
    "name": {
      "terms": {
        "field": "name",
        "order": {
          "_term": "asc"
        }
      },
      "aggs": {
        "score": {
          "terms": {
            "field": "score"
          }
        }
      }
    }
  }
}

这是我的预期结果:

"aggregations": {
      "name": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": "---",
               "doc_count": 169529,
               "score": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": 0,
                        "doc_count": 160133
                     },
                     {
                        "key": 5,
                        "doc_count": 9395
                     },
                     {
                        "key": 4,
                        "doc_count": 1
                     }
                  ]
               }
            },
            {
               "key": "John",
               "doc_count": 1,
               "score": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": 5,
                        "doc_count": 1
                     }
                  ]
               }
            }

现在我想从名为=' ---'的结果中删除存储桶。我尝试使用' not'但它没有用。任何暗示都将受到赞赏。

PS:我是弹性搜索的新手,只是想扩展我的知识。

1 个答案:

答案 0 :(得分:2)

您需要在查询中排除---

{
  "size": 10,
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "submitTime": {
                  "gt": "now-18d"
                }
              }
            }
          ],
          "must_not": [
            {
              "term": {
                "name": "---"
              }
            }
          ]
        }
      }
    }
  },
  "aggs": {
    "name": {
      "terms": {
        "field": "name",
        "order": {
          "_term": "asc"
        }
      },
      "aggs": {
        "score": {
          "terms": {
            "field": "score"
          }
        }
      }
    }
  }
}