elasticsearch内连接

时间:2015-10-03 21:24:23

标签: elasticsearch

我有一些带有某些字段的索引,我的文档包含有效的"类别"数据还包含" url"(已分析字段)数据但不包含respsize .. 在另一方面,包含" respsize"数据(大于0)也包含" url"数据但不包含"类别"数据.. 我认为你明白了,我需要连接或交叉,无论查询返回的所有文档都包含respsize和具有相同url文档的类别。

这是我到目前为止所做的;(分析了url字段,其余部分没有分析)

这里有类别的文件: enter image description here

和其他文件已经重新调整,我需要根据网址组合它们 enter image description here

我需要一个dsl查询,它返回具有相同网址标记的记录(在此方案中,它将是www.domainname.com),包含合并类别和respsize, 我只想在第二个img"类别":" 27"比如img1,但当然还有其他所有领域。

这是我的查询,但没有工作

GET webproxylog/accesslog/_search
{
  "query": {
    "filtered": {
      "filter" : {
            "and" : {
                "filters": [
                    {
                        "not": {
                          "filter": {
                            "terms": {
                              "category": [
                                "-",
                                "-1",
                                "0"
                              ]
                            },
                            "term": {
                              "respsize": "0"
                            }
                          }
                        },
                        "term": {
                          "category": "www.hurriyet.com.tr"
                        }
                    }
                ],
                "_cache" : true
            }
        }
    }
  },
  "sort": [
    {
      "respsize": {
        "order": "desc"
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

您可以尝试以下查询。它将要求url字段是您指定的字段(即must),然后接下来的两个子句(即should)中的任何一个必须为真,即category应该不是给定术语之一,或者respsize必须大于0。

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "url": "www.hurriyet.com.tr"
              }
            }
          ],
          "should": [
            {
              "not": {
                "terms": {
                  "category": [
                    "-",
                    "-1",
                    "0"
                  ]
                }
              }
            },
            {
              "range": {
                "respsize": {
                  "gt": 0
                }
              }
            }
          ]
        }
      }
    }
  }
}