map语法获取index_复习Elasticsearch的基础语法(一)
之前實踐過的Elasticsearch到現(xiàn)在基本上的語法我都回憶不起來了,所以準備寫篇文章幫助自己復習一下,沒有什么技術(shù)含量的分享,但是也分享給想初步了解的朋友們。
就不介紹Elasticsearch了,直接進入正文(手動分割線0.0)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
為了模擬真實場景,建議大家在linux下安裝Elasticsearch。
Kibana是一個Elasticsearch索引庫數(shù)據(jù)統(tǒng)計工具,可以利用Elasticsearch的聚合功能,生成各種圖表,而且還提供了操作Elasticsearch索引數(shù)據(jù)的控制臺,并且提供了一定的API提示,非常有利于我們學習Elasticsearch的語法(劃重點!!!提供API提示!),建議安裝。
啟動后Kibana后
選擇左側(cè)的DevTools菜單,即可進入控制臺頁面
1.基本概念
Elasticsearch也是基于Lucene的全文檢索庫,本質(zhì)也是存儲數(shù)據(jù),很多概念與MySQL類似的。
對比關(guān)系:
索引(indices)--------------------------------Databases 數(shù)據(jù)庫
類型(type)-----------------------------Table 數(shù)據(jù)表 ? ? 文檔(Document)----------------Row 行 ? 字段(Field)-------------------Columns 列2.創(chuàng)建索引
Elasticsearch采用Rest風格API,因此其API就是一次http請求,你可以用任何工具發(fā)起http請求
創(chuàng)建索引的請求格式:
請求方式:PUT
請求路徑:/索引庫名
請求參數(shù):json格式:
{ ? ?"settings": { ? ? ? ?"number_of_shards": 3, ? ? ? ?"number_of_replicas": 2 ? ? }}number_of_shards:分片數(shù)量
number_of_replicas:副本數(shù)量
settings:索引庫的設置
查看和刪除分別使用get和delete請求即可。
2.1 映射配置
通俗的講就是mysql數(shù)據(jù)庫中的建表
創(chuàng)建映射請求方式依然是PUT
PUT /索引庫名/_mapping/類型名稱{ "properties": { ? "字段名": { ? ? "type": "類型", ? ? "index": true, ? ? "store": true, ? ? "analyzer": "分詞器" ? } }}類型名稱:就是前面type的概念,類似于數(shù)據(jù)庫中的不同表字段名:任意填寫 ,可以指定許多屬性,例如:
type:類型,可以是text、long、short、date、integer、object等
index:是否索引,默認為true
store:是否存儲,默認為false
analyzer:分詞器
Elasticsearch中支持的數(shù)據(jù)類型非常豐富
他的String類型,又分兩種,這個很有特色!:
text:可分詞,不可參與聚合
keyword:不可分詞,數(shù)據(jù)會作為完整字段進行匹配,可以參與聚合
2.1.2index
index影響字段的索引情況。
true:字段會被索引,則可以用來進行搜索。默認值就是true
false:字段不會被索引,不能用來搜索
index的默認值就是true,但是有些字段是我們不希望被索引的,比如商品的圖片信息,就設置index為false。
2.1.3 store
是否將數(shù)據(jù)進行額外存儲。
Elasticsearch在創(chuàng)建文檔索引時,會將文檔中的原始數(shù)據(jù)備份,保存到一個叫做_source的屬性中。而且我們可以通過過濾_source來選擇哪些要顯示,哪些不顯示。
而如果設置store為true,就會在_source以外額外存儲一份數(shù)據(jù),多余,因此一般我們都會將store設置為false。默認就為false
2.2 新增數(shù)據(jù)
通過POST請求,可以向一個已經(jīng)存在的索引庫中添加數(shù)據(jù)
示例:
POST /test/goods/
{
? ? "title":"籃球",
? ? "images":"123",
? ? "price":99
}
通過kibana查看數(shù)據(jù):
get _search
{
? ? "query":{
? ? ? ? "match_all":{}
? ? }
}
-----------------------------------------------------------------------------
響應:
{
? "_index": "test",
? "_type": "goods",
? "_id": "r9c1KGMBIhaxtY5rlRKv",
? "_version": 1,
? "_score": 1,
? "_source": {
? ? "title": "籃球",
? ? "images": "123",
? ? "price": 99
? }
}
_source:源文檔信息,所有的數(shù)據(jù)都在里面。
_id:這條文檔的唯一標示,與文檔自己的id字段沒有關(guān)聯(lián)
3. 查詢
我們從4塊來講查詢:
基本查詢
_source過濾
結(jié)果過濾
高級查詢
排序
3.1基本查詢
基本語法
GET /索引庫名/_search{ ? ?"query":{ ? ? ? ?"查詢類型":{ ? ? ? ? ? ?"查詢條件":"查詢條件值" ? ? ? } ? }}這里的query代表一個查詢對象,里面可以有不同的查詢屬性
查詢類型:
例如:match_all,?match,term?,?range 等等
查詢條件:查詢條件會根據(jù)類型的不同,寫法也有差異
示例:
GET /test/_search
{
? ? "query":{
? ? ? ? "match_all": {}
? ? }
}
query:代表查詢對象
match_all:代表查詢所有
------------------------------------------------------------------------------
結(jié)果:
{
? "took": 2,
? "timed_out": false,
? "_shards": {
? ? "total": 3,
? ? "successful": 3,
? ? "skipped": 0,
? ? "failed": 0
? },
? "hits": {
? ? "total": 2,
? ? "max_score": 1,
? ? "hits": [
? ? ? {
? ? ? ? "_index": "jiang",
? ? ? ? "_type": "goods",
? ? ? ? "_id": "2",
? ? ? ? "_score": 1,
? ? ? ? "_source": {
? ? ? ? ? "title": "籃球",
? ? ? ? ? "images": "123",
? ? ? ? ? "price": 99
? ? ? ? }
? ? ? },
? ? ? {
? ? ? ? "_index": "jiang",
? ? ? ? "_type": "goods",
? ? ? ? "_id": "r9c1KGMBIhaxtY5rlRKv",
? ? ? ? "_score": 1,
? ? ? ? "_source": {
? ? ? ? ? "title": "足球",
? ? ? ? ? "images": "123",
? ? ? ? ? "price": 69
? ? ? ? }
? ? ? }
? ? ]
? }
}
took:查詢花費時間,單位是毫秒
time_out:是否超時
_shards:分片信息
hits:搜索結(jié)果總覽對象
_index:索引庫
_type:文檔類型
_id:文檔id
_score:文檔得分
_source:文檔的源數(shù)據(jù)
total:搜索到的總條數(shù)
max_score:所有結(jié)果中文檔得分的最高分
hits:搜索結(jié)果的文檔對象數(shù)組,每個元素是一條搜索到的文檔信息
3.2匹配查詢
or關(guān)系
match類型查詢,會把查詢條件進行分詞,然后進行查詢,多個詞條之間是or的關(guān)系
GET /test/_search
{
? ? "query":{
? ? ? ? "match":{
? ? ? ? ? ? "title":"小米電視"
? ? ? ? }
? ? }
}
結(jié)果不僅會查詢到電視,而且與小米相關(guān)的都會查詢到,多個詞之間是or的關(guān)系。
-------------------------------------------------------------------------------------------------------
and關(guān)系
某些情況下,我們需要更精確查找,我們希望這個關(guān)系變成and,可以這樣做
GET /test/_search
{
? ? "query":{
? ? ? ? "match": {
? ? ? ? ? "title": {
? ? ? ? ? ? "query": "小米電視",
? ? ? ? ? ? "operator": "and"
? ? ? ? ? }
? ? ? ? }
? ? }
}
這樣,只有同時包含小米和電視的詞條才會被搜索到。
3.3多字段查詢
multi_match與match類似,不同的是它可以在多個字段中查詢結(jié)果我們會在title字
GET /test/_search
{
? ? "query":{
? ? ? ? "multi_match": {
? ? ? ? ? ? "query":? ? "小米",
? ? ? ? ? ? "fields":? ?[ "title", "subTitle" ]
? ? ? ? }
}
}
段和subtitle字段中查詢小米這個詞
3.4詞條匹配(term)
term 查詢被用于精確值 匹配,這些精確值可能是數(shù)字、時間、布爾或者那些未分詞的字符串
GET /test/_search
{
? ? "query":{
? ? ? ? "term":{
? ? ? ? ? ? "price":2699.00
? ? ? ? }
? ? }
}
3.5結(jié)果過濾
默認情況下,elasticsearch在搜索的結(jié)果中,會把文檔中保存在_source的所有字段都返回。
如果我們只想獲取其中的部分字段,我們可以添加_source的過濾
GET /test/_search
{
? "_source": ["title","price"],
? "query": {
? ? "term": {
? ? ? "price": 2699
? ? }
? }
}
------------------------------------------------------------------------------------------------------------
突然發(fā)現(xiàn)有點晚了,還是下次再繼續(xù)介紹高級查詢和聚合的使用好了。。。。。。。。。。。
敬請期待~~~~~~~~~~~
總結(jié)
以上是生活随笔為你收集整理的map语法获取index_复习Elasticsearch的基础语法(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 列赋值为列表_Pandas入门-3-新增
- 下一篇: java 纳秒 毫秒_golang的ti