【问题标题】:Elastic Search single index vs multiple index弹性搜索单索引与多索引
【发布时间】:2023-01-31 01:06:59
【问题描述】:

我想在弹性搜索中插入嵌套结构。 例如 :

         [  
           {    "Product" : "P1",
                "Desc" : "productDesc",
                 "Items":[{
                    "I1": "i1",
                    "I_desc" : "i1_desc",
                    "prices" :[{
                        "id" : "price1",
                        "value" : 10
                        },{
                       "id" : "price2",
                       "value" : 20
                    }]
                },
               {
                 "I2": "i2",
                 "I_desc" : "i2_desc",
                 "prices" :[{
                     "id" : "price1",
                     "value" : 10
                  },{
                    "id" : "price",
                     "value" : 20
                  }]
             }]
           },
            {    "Product" : "P12",
                 "Desc" : "product2Desc",
                 "Items":[{
                     "I1": "i1",
                      "I_desc" : "i1_desc",
                      "prices" :[{
                           "id" : "price11",
                            "value" : 12
                           },{
                              "id" : "price12",
                              "value" : 10
                           }]
                      },{
                        "I2": "i3",
                        "I_desc" : "i3_desc",
                        "prices" :[{
                            "id" : "price11",
                            "value" : 12
                          },{
                            "id" : "price31",
                            "value" : 33
                       }]
                     }]
                  }
              ]

        

我想在 Elastic Serach 中插入类似于此嵌套结构的索引 pro 和 id = P1 和 P12(2 插入数据)。 然后查询数据,如 1. 给我所有产品 ID -> 有价格 -> id = price11 2. item = i1 的所有产品

我应该使用单一索引来 Id 还是索引所有属性,如 Item、productDesc、prices、id、value?

【问题讨论】:

    标签: elasticsearch indexing multi-index


    【解决方案1】:

    您可以使用单个索引来存储 Elasticsearch 中的嵌套结构,其中每个产品都是一个 id 为“P1”或“P12”的文档。以下是您提供的结构的示例映射:

    PUT pro
    {
      "mappings": {
        "properties": {
          "Product": {
            "type": "keyword"
          },
          "Desc": {
            "type": "text"
          },
          "Items": {
            "type": "nested",
            "properties": {
              "I1": {
                "type": "keyword"
              },
              "I2": {
                "type": "keyword"
              },
              "I_desc": {
                "type": "text"
              },
              "prices": {
                "type": "nested",
                "properties": {
                  "id": {
                    "type": "keyword"
                  },
                  "value": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      }
    }
    

    要插入数据,您可以使用以下 POST 请求:

    POST pro/_doc/P1
    {
      "Product": "P1",
      "Desc": "productDesc",
      "Items": [
        {
          "I1": "i1",
          "I_desc": "i1_desc",
          "prices": [
            {
              "id": "price1",
              "value": 10
            },
            {
              "id": "price2",
              "value": 20
            }
          ]
        },
        {
          "I2": "i2",
          "I_desc": "i2_desc",
          "prices": [
            {
              "id": "price1",
              "value": 10
            },
            {
              "id": "price",
              "value": 20
            }
          ]
        }
      ]
    }
    
    POST pro/_doc/P12
    {
      "Product": "P12",
      "Desc": "product2Desc",
      "Items": [
        {
          "I1": "i1",
          "I_desc": "i1_desc",
          "prices": [
            {
              "id": "price11",
              "value": 12
            },
            {
              "id": "price12",
              "value": 10
            }
          ]
        },
        {
          "I2": "i3",
          "I_desc": "i3_desc",
          "prices": [
            {
              "id": "price11",
              "value": 12
            },
            {
              "id": "price31",
              "value": 33
            }
          ]
        }
      ]
    }
    

    要查找价格 ID 为“price11”的所有产品 ID,可以使用以下查询:

    GET pro/_search
    {
      "query": {
        "nested": {
          "path": "Items.prices",
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "Items.prices.id": "price11"
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    要查找项目为“i1”的所有产品,您可以使用以下查询:

    GET pro/_search
    {
      "query": {
        "nested": {
          "path": "Items",
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "Items.I1": "i1"
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    我希望它有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多