elasticsearch中多维数组的映射和查询



我是ElasticSearch的新手。这是我的数据。如何映射和查询以下数据

[parameters] => Array
    (
        [0] => Array
            (
                [param_id] => "Browser"
                [param_values] => Array
                    (
                        [0] => "Firefox"
                    )
            )
        [1] => Array
            (
                [param_id] => "BrowserVersion"
                [param_values] => Array
                    (
                        [0] => "39"
                    )
            )
        [2] => Array
            (
                [param_id] => "OS"
                [param_values] => Array
                    (
                        [0] => "Windows"
                    )
            )
        [3] => Array
            (
                [param_id] => "Softwares"
                [param_values] => Array
                    (
                        [0] => "Java"
                        [1] => "Oracle"
                        [2] => "PHP"
                    )
            )
    )

我必须得到下面查询的结果。

将"操作系统"称为"Windows",将"软件"称为"Java"的用户。如何映射这些数据并进行查询?

下面是映射JSON:
{
"response": {
  "properties": {
    "profile_id" : {"type" : "long"},
    "timestamp" : {"type" : "string"},
    "parameters" : {
        "type": "nested",
      "properties":{
        "param_id":{"type": "string"},
        "param_values": {             
              "type": "string"                                            
        }
      }
    }
  }
}

}

下面是我的查询JSON:
{   "query": {
  "filtered": {
     "query": {
        "match_all": {}
     },
     "filter": {
        "bool": {
           "must": [
              {
                 "nested": {
                    "path": "parameters",
                    "query": {
                       "bool": {
                          "must": [
                             {
                                "term": {
                                   "parameters.param_id": "Softwares"
                                }
                             },
                             {
                                "term": {
                                   "parameters.param_values": "Java"
                                }
                             }
                          ]
                       }
                    }
                 }
              }
           ]
        }
     }
  }   }}

让我们从使用

创建索引开始
curl -XPUT localhost:9200/responses -d '{
  "mappings": {
    "response": {
      "properties": {
        "profile_id": {
          "type": "long"
        },
        "timestamp": {
          "type": "string"
        },
        "parameters": {
          "type": "nested",
          "properties": {
            "param_id": {
              "type": "string"
            },
            "param_values": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}'

然后我们索引你的样本文档:

curl -XPUT localhost:9200/responses/response/1 -d '{
  "profile_id": 1,
  "timestamp": "2015-01-01T00:00:00",
  "parameters": [
    {
      "param_id": "Browser",
      "param_values": [
        "Firefox"
      ]
    },
    {
      "param_id": "BrowserVersion",
      "param_values": [
        "39"
      ]
    },
    {
      "param_id": "OS",
      "param_values": [
        "Windows"
      ]
    },
    {
      "param_id": "Softwares",
      "param_values": [
        "Java",
        "Oracle",
        "PHP"
      ]
    }
  ]
}'

你的开头很好,你的问题几乎是正确的。如果你想查询使用"Windows"作为"OS",使用"Java"作为"software"的用户,你已经有了后者的约束,现在你只需要再为前者添加一个约束(即OS=Windows)

{
  "size": 30,
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "nested": {
                "path": "parameters",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "term": {
                          "parameters.param_id": "os"
                        }
                      },
                      {
                        "term": {
                          "parameters.param_values": "windows"
                        }
                      }
                    ]
                  }
                }
              }
            },
            {
              "nested": {
                "path": "parameters",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "term": {
                          "parameters.param_id": "softwares"
                        }
                      },
                      {
                        "term": {
                          "parameters.param_values": "java"
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新