我是靠谱客的博主 儒雅帅哥,最近开发中收集的这篇文章主要介绍elasticsearch 嵌套对象查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

// 创建嵌套对象mapping
PUT /earth_index 
{
  "mappings": {
    "earthblog": {
      "properties": {
        "title":{ "type":"string"},
        "body":{ "type":"string"},
        "comments": {
          "type": "nested", 
          "properties": {
            "name":    { "type": "string"  },
            "comment": { "type": "string"  },
            "age":     { "type": "short"   },
            "stars":   { "type": "short"   },
            "date":    { "type": "date"    }
          }
        }
      }
    }
  }
}

// 插入数据
PUT /earth_index/earthblog/1 
{
  "title": "Nest eggs",
  "body":  "Making your money work...",
  "comments": [ 
    {
      "name":    "John Smith",
      "comment": "Great article",
      "age":     28,
      "stars":   4,
      "date":    "2014-09-01"
    },
    {
      "name":    "Alice White",
      "comment": "More like this please",
      "age":     31,
      "stars":   5,
      "date":    "2014-10-22"
    }
  ]
}

// 非嵌套查询(Alice且28岁)
GET /earth_index/earthblog/_search 
{
  "query": {
    "bool": {
      "must": [
        { "match": { "comments.name": "Alice" }},
        { "match": { "comments.age":  28      }} 
      ]
    }
  }
}
// 输出,无结果。


// 嵌套查询(Alice且28岁,或者,Alice且31岁)
GET /earth_index/earthblog/_search 
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "comments.name": "Alice"
              }
            },
            {
              "match": {
                "comments.age": 28
              }
            }
          ]
        }
      }
    }
  }
}
// 输出,无结果。

// 嵌套查询(Alice且31岁)
GET /earth_index/earthblog/_search 
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "comments.name": "Alice"
              }
            },
            {
              "match": {
                "comments.age": 31
              }
            }
          ]
        }
      }
    }
  }
}
// 输出,有结果,为之前插入的那条数据。
====================================================
// 创建非嵌套对象,字段类型自动映射
PUT /earth_index/earthblog2/1 
{
  "title": "Nest eggs",
  "body":  "Making your money work...",
  "comments2": [ 
    {
      "name":    "John Smith",
      "comment": "Great article",
      "age":     28,
      "stars":   4,
      "date":    "2014-09-01"
    },
    {
      "name":    "Alice White",
      "comment": "More like this please",
      "age":     31,
      "stars":   5,
      "date":    "2014-10-22"
    }
  ]
}

// 非嵌套查询(Alice且28岁)
GET /earth_index/earthblog2/_search 
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "comments2.name": "Alice"
          }
        },
        {
          "match": {
            "comments2.age": 28
          }
        }
      ]
    }
  }
}
// 输出:上面那条数据被当做符合条件的结果。但实际上Alice是31岁。

// 嵌套查询(Alice且31岁)
GET /earth_index/earthblog2/_search
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "comments.name": "Alice"
              }
            },
            {
              "match": {
                "comments.age": 31
              }
            }
          ]
        }
      }
    }
  }
}

// 输出:无结果。
// 查看mapping
GET /earth_index/earthblog/_mapping

{
  "earth_index": {
    "mappings": {
      "earthblog": {
        "properties": {
          "body": {
            "type": "text"
          },
          "comments": {
            "type": "nested",
            "properties": {
              "age": {
                "type": "short"
              },
              "comment": {
                "type": "text"
              },
              "date": {
                "type": "date"
              },
              "name": {
                "type": "text"
              },
              "stars": {
                "type": "short"
              }
            }
          },
          "title": {
            "type": "text"
          }
        }
      }
    }
  }
}

GET /earth_index/earthblog2/_mapping

{
  "earth_index": {
    "mappings": {
      "earthblog2": {
        "properties": {
          "body": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "comments2": {
            "properties": {
              "age": {
                "type": "long"
              },
              "comment": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "date": {
                "type": "date"
              },
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "stars": {
                "type": "long"
              }
            }
          },
          "title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}



最后

以上就是儒雅帅哥为你收集整理的elasticsearch 嵌套对象查询的全部内容,希望文章能够帮你解决elasticsearch 嵌套对象查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部