elasticsearch运行任何对字段的查询都存在

时间:2015-09-12 10:13:52

标签: elasticsearch

我想根据存在的字段运行任何查询/过滤器。在我们的情况下,如果用户回答特定字段,那么只有我们将存储该值,否则将不会存储该字段。我该如何运行查询?

以下是我的映射:

"mappings": {
     "responses_10_57": {
        "properties": {
           "rid: {
              "type": "long"
           },
           "end_time": {
              "type": "date",
              "format": "dateOptionalTime"
           },
           "start_time": {
              "type": "date",
              "format": "dateOptionalTime"
           },
       "qid_1": {
              "type": "string",
              "fields": {
                 "raw": {
                    "type": "string",
                    "analyzer": "str_params"
                 }
              }
           },
    "qid_2": {
              "type": "string",
              "fields": {
                 "raw": {
                    "type": "string",
                    "analyzer": "str_params"
                 }
              }
           },
    "qid_3": {
              "properties": {
                 "msg_text": {
                    "type": "string"
                 },
         "msg_tags": {
                    "type": "string",
                    "fields": {
                       "raw": {
                          "type": "string",
                          "analyzer": "str_params"
                       }
                    }
                 }
              }
           }
   }
  }

}

qid_1是名称字段,qid_2是类别字段,qid_3是文本消息字段。

但是qid_3不是必填字段。因此,如果用户未输入任何短信,我们将不会插入记录。

1)我希望每个类别都能计算那些回复第三个问题的人。

2)我必须搜索回答第三个问题的姓名。

如何编写这两个查询?

1 个答案:

答案 0 :(得分:0)

两个查询都应该有exists filter来限制只响应qid_3存在的文档(不为空)的响应。对于您的第一个查询,您可以尝试terms aggregation。对于第二个查询,您可以过滤来源,仅包含回复中的名称或store the field并使用fields

1)

val pt = new PatriciaTrie[String]()
val method = pt.getClass.getSuperclass.getDeclaredMethod("floorEntry", classOf[Object])
method.setAccessible(true)
// and then for retrieving the entry for floor(key) 
val entry = method.invoke(pt, key).asInstanceOf[Entry[String, String]]

2)

{
    "size": 0,
    "filter" : {
        "exists" : { "field" : "quid_3" }
    },
    "aggs" : {
      "group_by_category" : {
        "terms" : { "field" : "qid_2" }
      }
    }
}