Elasticsearch 數據查詢


數據准備:

PUT /shop
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

PUT /shop/_mapping/goods
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "price": {
      "type": "float"
    },
    "stock": {
      "type": "integer"
    }
  }
}

POST /shop/goods/_bulk
{"index":{}}
{"title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待","price": 2299.00,"stock": 8800}
{"index":{}}
{"title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機","price": 4999.00,"stock": 5600}
{"index":{}}
{"title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)","price": 8599.00,"stock": 1900}
{"index":{}}
{"title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器","price": 109.00,"stock": 9970}

 

一、基本查詢

語法:

GET /索引庫名/_search
{
  "query": {
    "查詢類型": {
      "查詢條件": "查詢條件值"
    }
  }
}

查詢類型:match_all,match,term,range,fuzzy,bool 等等

查詢條件:查詢條件會根據類型的不同,寫法也有差異

 

1.1 查詢所有(match_all)

查詢指令:

GET /shop/_search
{
  "query": {
    "match_all": {}
  }
}

 

查詢結果:

{
  "took": 13,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "P4EGtmgBBdkQnU_d8b7I",
        "_score": 1,
        "_source": {
          "title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)",
          "price": 8599,
          "stock": 1900
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": 1,
        "_source": {
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器",
          "price": 109,
          "stock": 9970
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PYEGtmgBBdkQnU_d4b4m",
        "_score": 1,
        "_source": {
          "title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待",
          "price": 2299,
          "stock": 8800
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PoEGtmgBBdkQnU_d6b4Q",
        "_score": 1,
        "_source": {
          "title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機",
          "price": 4999,
          "stock": 5600
        }
      }
    ]
  }
}

 

對查詢結果進行分頁

GET /shop/_search
{
  "query": {
    "match_all": {}
  },
  "from": 1,
  "size": 2
}

 

 

1.2 匹配查詢(match)

or 關系:會把查詢條件進行分詞,然后進行查詢,多個詞條之間是or的關系

查詢指令:

GET /shop/_search
{
  "query": {
    "match": {
      "title": {
        "query": "小米手機",
        "operator": "or"
      }
    }
  }
}

 

查詢結果:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1.6051829,
    "hits": [
      {
        "_index": "demo",
        "_type": "goods",
        "_id": "MIHNs2gBBdkQnU_d_r6o",
        "_score": 1.6051829,
        "_source": {
          "title": "華為手機",
          "price": "2199.00"
        }
      },
      {
        "_index": "demo",
        "_type": "goods",
        "_id": "LYHJs2gBBdkQnU_dt75n",
        "_score": 0.2876821,
        "_source": {
          "title": "小米手機",
          "price": "1699.00"
        }
      }
    ]
  }
}

 

and關系:會把查詢條件進行分詞,然后進行查詢,多個詞條之間是and的關系

查詢指令:

GET /shop/_search
{
  "query": {
    "match": {
      "title": {
        "query": "小米手機",
        "operator": "and"
      }
    }
  }
}

 

查詢結果:

{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.92355466,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PYEGtmgBBdkQnU_d4b4m",
        "_score": 0.92355466,
        "_source": {
          "title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待",
          "price": 2299,
          "stock": 8800
        }
      }
    ]
  }
}

 

1.3 詞條查詢

單值查詢(term)

查詢指令:

GET /shop/_search
{
  "query": {
    "term": {
      "price": 109.00
    }
  }
}

 

查詢結果:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": 1,
        "_source": {
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器",
          "price": 109,
          "stock": 9970
        }
      }
    ]
  }
}

 

多值查詢(terms)

查詢指令:

GET /shop/_search
{
  "query": {
    "terms": {
      "price": [8599.00,109.00]
    }
  }
}

 

查詢結果:

{
  "took": 15,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "P4EGtmgBBdkQnU_d8b7I",
        "_score": 1,
        "_source": {
          "title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)",
          "price": 8599,
          "stock": 1900
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": 1,
        "_source": {
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器",
          "price": 109,
          "stock": 9970
        }
      }
    ]
  }
}

 

二、結果過濾

 默認情況下,elasticsearch在搜索的結果中,會把文檔中保存在 _source 的所有字段都返回。

如果我們只想獲取其中的部分字段,我們可以添加 _source 字段進行過濾

2.1 包含字段查詢(includes)

查詢指令:

GET /shop/_search
{
  "query": {
    "match_all": {}
  },
  "_source": {
    "includes": ["title","price"]
  }
}

 

查詢結果:

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "P4EGtmgBBdkQnU_d8b7I",
        "_score": 1,
        "_source": {
          "price": 8599,
          "title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)"
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": 1,
        "_source": {
          "price": 109,
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器"
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PYEGtmgBBdkQnU_d4b4m",
        "_score": 1,
        "_source": {
          "price": 2299,
          "title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待"
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PoEGtmgBBdkQnU_d6b4Q",
        "_score": 1,
        "_source": {
          "price": 4999,
          "title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機"
        }
      }
    ]
  }
}

 

 2.2 排除字段查詢(excludes)

查詢指令

GET /shop/_search
{
  "query": {
    "match_all": {}
  },
  "_source": {
    "excludes": "price"
  }
}

 

查詢結果:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "P4EGtmgBBdkQnU_d8b7I",
        "_score": 1,
        "_source": {
          "title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)",
          "stock": 1900
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": 1,
        "_source": {
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器",
          "stock": 9970
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PYEGtmgBBdkQnU_d4b4m",
        "_score": 1,
        "_source": {
          "title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待",
          "stock": 8800
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PoEGtmgBBdkQnU_d6b4Q",
        "_score": 1,
        "_source": {
          "title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機",
          "stock": 5600
        }
      }
    ]
  }
}

 

三、高級查詢

3.1 范圍查詢(range)

查詢找出那些落在指定區間內的數字或者時間

查詢指令:

GET /shop/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 2000,
        "lte": 5000
      }
    }
  }
}

 

查詢結果:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PYEGtmgBBdkQnU_d4b4m",
        "_score": 1,
        "_source": {
          "title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待",
          "price": 2299,
          "stock": 8800
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PoEGtmgBBdkQnU_d6b4Q",
        "_score": 1,
        "_source": {
          "title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機",
          "price": 4999,
          "stock": 5600
        }
      }
    ]
  }
}

range查詢允許以下操作符

 

 3.2 布爾查詢(bool)

bool把各種其它查詢通過must(與)、must_not(非)、should(或)的方式進行組合

查詢指令:

GET /shop/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "筆記本"
          }
        },
        {
          "term": {
            "price": 109.00
          }
        }
      ]
    }
  }
}

 

查詢結果:

{
  "took": 15,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1.9646256,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "P4EGtmgBBdkQnU_d8b7I",
        "_score": 1.9646256,
        "_source": {
          "title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)",
          "price": 8599,
          "stock": 1900
        }
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": 1,
        "_source": {
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器",
          "price": 109,
          "stock": 9970
        }
      }
    ]
  }
}

 

四、過濾查詢

所有的查詢都會影響到文檔的評分及排名。如果我們需要在查詢結果中進行過濾,並且不希望過濾條件影響評分,

那么就不要把過濾條件作為查詢條件來用,而是使用filter方式。

查詢指令:

GET /shop/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "手機"
          }
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gt": 3000
          }
        }
      }
    }
  }
}

 

查詢結果:

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.17329858,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PoEGtmgBBdkQnU_d6b4Q",
        "_score": 0.17329858,
        "_source": {
          "title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機",
          "price": 4999,
          "stock": 5600
        }
      }
    ]
  }
}

 

注意:filter中還可以再次進行bool組合條件過濾。 

 

五、排序查詢

sort 可以讓我們按照不同的字段進行排序,並且通過order指定排序的方式。

查詢指令:

GET /shop/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

 

查詢結果:

{
  "took": 55,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": null,
    "hits": [
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "P4EGtmgBBdkQnU_d8b7I",
        "_score": null,
        "_source": {
          "title": "聯想(Lenovo)拯救者Y7000P英特爾酷睿 i7 15.6英寸游戲筆記本電腦(i7-8750H 8G 512G SSD GTX1060 144Hz黑)",
          "price": 8599,
          "stock": 1900
        },
        "sort": [
          8599
        ]
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PoEGtmgBBdkQnU_d6b4Q",
        "_score": null,
        "_source": {
          "title": "OPPO Find X曲面全景屏 波爾多紅 8GB+128GB 全網通 移動聯通電信全網通4G 雙卡雙待手機",
          "price": 4999,
          "stock": 5600
        },
        "sort": [
          4999
        ]
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "PYEGtmgBBdkQnU_d4b4m",
        "_score": null,
        "_source": {
          "title": "小米8 全面屏游戲智能手機 6GB+64GB 黑色 全網通4G 雙卡雙待",
          "price": 2299,
          "stock": 8800
        },
        "sort": [
          2299
        ]
      },
      {
        "_index": "shop",
        "_type": "goods",
        "_id": "QIEGtmgBBdkQnU_d-r6T",
        "_score": null,
        "_source": {
          "title": "TP-LINK TL-WDR5620 1200M 5G雙頻智能無線路由器 四天線智能wifi 穩定穿牆高速家用路由器",
          "price": 109,
          "stock": 9970
        },
        "sort": [
          109
        ]
      }
    ]
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM