Elastic Search 索引 API 介紹

前言

Elastic Search 主要靠 Restful api 來對索引進(jìn)行操作媳友。主要分為兩類风科,一類是索引的管理類的 api ,包括索引的創(chuàng)建乞旦、修改贼穆、刪除、查詢等兰粉,文檔的創(chuàng)建故痊、修改、刪除等玖姑。還有一類是查詢類愕秫,包括各種條件的文檔的檢索慨菱。

這里我們準(zhǔn)備了好了一個場景。在這里我們假定有一批作者戴甩,每個作者都有標(biāo)識符喝、姓名、性別甜孤、年齡协饲,描述著幾個字段。每個作者都會寫一些列的文章缴川,文章包括文章標(biāo)識茉稠、標(biāo)題、作者標(biāo)識把夸、內(nèi)容而线、發(fā)表時間字段。我們需要通過姓名恋日、年齡膀篮、描述中的關(guān)鍵詞來查詢作者,需要根據(jù)發(fā)表時間谚鄙、標(biāo)題關(guān)鍵詞各拷、內(nèi)容關(guān)鍵詞以及作者來查詢文章。

這里分析一下闷营。我們需要建兩個索引烤黍,一個是作者索引,還有一個是文章索引傻盟。其中作者索引的描述字段和文章索引的標(biāo)題速蕊、內(nèi)容字段需要做分詞。

以下所有操作都是在前文《Elastic Search 安裝和配置》的基礎(chǔ)上進(jìn)行的娘赴。大部分的 rest api 的請求都是在 postman 這個工具里完成规哲。

安裝分詞解析器

要按照關(guān)鍵詞進(jìn)行搜素,需要對對應(yīng)的字段的值進(jìn)行分詞诽表。針對中文唉锌,需要指定特殊的分詞插件。這里我們用了 IK 分詞插件竿奏。這個插件有針對 Elastic Search 的安裝包袄简。注意一定要安裝對應(yīng)版本的。前面安裝的 Elastic Search 的版本時 6.1.1 所以用下面的命令來安裝:

elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.1.1/elasticsearch-analysis-ik-6.1.1.zip

安裝好了后泛啸,重啟 Elastic Search绿语,執(zhí)行命令

curl http://10.110.2.53:9200/_cat/plugins
master analysis-ik 6.1.1

可以看到,IK 6.1.1的分詞器已經(jīng)安裝好了

索引操作

創(chuàng)建索引

一個典型的索引創(chuàng)建的 rest api 接口的調(diào)用如下所示:

curl -X PUT -H 'Content-Type:application/json'  \
http://10.110.2.53:9200/author -d '
{
    "settings": {
        "index": {
            "number_of_shards": 6,
            "number_of_replicas": 0
        }
    },
    "mappings": {
        "person": {
            "properties": {
                "name": {
                    "type": "text"
                },
                "sex": {
                    "type": "text"
                },
                "age": {
                    "type": "integer"
                },
                "des": {
                    "type": "text",
                    "analyzer": "ik_max_word",
                    "search_analyzer": "ik_max_word"
                }
            }
        }
    }
}
'

這里包含兩個部分,第一個部分是索引設(shè)置(Setting)吕粹,第二個部分是索引映射(Mapping)

索引設(shè)置

索引設(shè)置通過 settings.index 用來設(shè)置索引的相關(guān)配置种柑。例子中設(shè)置索引的分片數(shù)量(number_of_shards)為 6 個,副本的數(shù)量(number_of_replicas)為 0 匹耕。因為我們的實(shí)驗環(huán)境是單節(jié)點(diǎn)的聚请,所以不創(chuàng)建副本。否則因為無法把副本創(chuàng)建到第二個 node 上泌神,會導(dǎo)致索引的健康狀態(tài)為 yellow良漱。

索引映射

索引映射( mapping)就是用來在創(chuàng)建索引的時候,指定索引中字段的配置欢际。配置的內(nèi)容包括

  • 字段是否可以被全文索引(分詞)
  • 字段存儲的數(shù)據(jù)類型
  • 字段顯示的數(shù)據(jù)格式
  • 字段是否要放到 _all 這個內(nèi)置的字段中母市。這個特性已經(jīng)被在6.0版本被聲明為不推薦使用了
明確索引映射

創(chuàng)建索引的時候,明確通過 mappings 參數(shù)來設(shè)置每個字段的映射就叫做明確索引映射损趋。如上述的例子患久。

動態(tài)索引映射

除了在創(chuàng)建索引的時候指定索引字段的映射關(guān)系,還有一個簡單的創(chuàng)建索引的方式是不指定索引字段的映射浑槽,Elastic Search 將會為索引采用動態(tài)映射(dynamic mapping)方式在第一次索引這個字段的時候自動推動自動的存儲類型蒋失、存儲格式等。

例如我們可以用一下方法創(chuàng)建一個作者(author)的索引

curl -X PUT http://10.110.2.53:9200/author

這個里面我們沒有為這個索引設(shè)置任何映射信息桐玻。當(dāng)我們用下面的信息為這個索引創(chuàng)建第一個文檔的時候篙挽,會自動的將 name、sex镊靴、des 映射為 text 類型铣卡,而將 age 映射為 long 。

 {
    "name":"楊高超",
    "age":24,
    "sex":"男",
    "des":"IT軟件工程師偏竟,擅長Java和軟件架構(gòu)"
 }

除了創(chuàng)建索引煮落,還有修改索引、查詢索引踊谋、刪除索引等操作 api蝉仇。更多、更詳細(xì)的索引操作 api 的用法可以參考官網(wǎng)文檔

文檔查詢

通過下面的命令查詢 author 索引的詳細(xì)信息如下:

curl http://10.110.2.53:9200/author?pretty
{
  "author" : {
    "aliases" : { },
    "mappings" : {
      "doc" : {
        "properties" : {
          "age" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "des" : {
            "type" : "text",
            "analyzer" : "ik_max_word"
          },
          "name" : {
            "type" : "text"
          },
          "age" : {
            "type" : "integer"
          },
          "sex" : {
            "type" : "text"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1515160270198",
        "number_of_shards" : "6",
        "number_of_replicas" : "0",
        "uuid" : "v1E0_mfAR5qRIroOV31HOA",
        "version" : {
          "created" : "6010199"
        },
        "provided_name" : "author"
      }
    }
  }
}

文檔索引

下面的命令將一個作者文檔索引到作者索引中

curl  -H 'Content-Type:application/json' http://10.110.2.53:9200/author -d '
{
    "name": "李高超",
    "age": 23,
    "sex": "女",
    "des": "IT軟件經(jīng)理殖蚕,擅長Java和開發(fā)管理"
}
'

最后索引到作者 (author) 索引和文章(article)索引的數(shù)據(jù)列表如下

作者索引文檔數(shù)據(jù)
文章索引文檔數(shù)據(jù)

文檔查詢

全文索引

curl -X GET 'http://10.110.2.53:9200/article/_search?q=docker搭建gitlab&pretty'
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 6,
    "successful" : 6,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.3862944,
    "hits" : [
      {
        "_index" : "article",
        "_type" : "doc",
        "_id" : "rKOjxmABQGn3FeQBeqAg",
        "_score" : 1.3862944,
        "_source" : {
          "title" : "通過 docker 搭建自用的 gitlab 服務(wù)",
          "author" : "qaOXxmABQGn3FeQBMqCA",
          "created" : "2018-01-01 15:11:11",
          "context" : "git 是當(dāng)下如日中天的版本管理系統(tǒng)〗蜗危現(xiàn)在如果不是工作在 git 版本管理系統(tǒng)之下,幾乎都不好意思和人打招呼了睦疫。有很多現(xiàn)成的互聯(lián)網(wǎng)的 git 服務(wù)提供給大家使用呀枢,例如號稱程序員社交網(wǎng)絡(luò)的 GitHub,還有低調(diào)好用的 bitbucket 笼痛。這些給個人使用或者公司用來做開源使用都沒有什么問題。但如果在部門內(nèi)推廣使用就會涉及到代碼不能公開或者額外的費(fèi)用的問題。本人原來在部門內(nèi)采用的是手工在 linux 服務(wù)器上來管理代碼倉庫缨伊。權(quán)限沒法設(shè)置摘刑,也非常不方便。所以也一直很苦惱刻坊。"
        }
      }
    ]
  }
}

復(fù)雜查詢

curl -X POST -H 'Content-Type:application/json' http://10.110.2.53:9200/author/_search?pretty -d '
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 6,
    "successful" : 6,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "author",
        "_type" : "doc",
        "_id" : "qaOXxmABQGn3FeQBMqCA",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "楊高超",
          "age" : "24",
          "sex" : "男",
          "des" : "IT軟件工程師枷恕,擅長Java和軟件架構(gòu)"
        }
      },
      {
        "_index" : "author",
        "_type" : "doc",
        "_id" : "qqOXxmABQGn3FeQBiKCD",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "李高超",
          "age" : "23",
          "sex" : "女",
          "des" : "IT軟件經(jīng)理,擅長Java和開發(fā)管理"
        }
      }
    ]
  }
}

帶布爾計算的查詢

curl -X POST -H 'Content-Type:application/json' http://10.110.2.53:9200/author/_search?pretty -d '
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "des": "經(jīng)理"
                    }
                },
                {
                    "match": {
                        "name": "高超"
                    }
                }
            ]
        }
    }
}
'

這個查詢得到 name 包含“高超”谭胚, des 包含“經(jīng)理”的作者

更多徐块、更詳細(xì)的查詢用法可以參考官網(wǎng)文檔。大家可以基于我們的樣例和文檔說明執(zhí)行更多的查詢灾而。

后記

對于 Elastic Search 的 Api 的詳細(xì)用法可以多參考官網(wǎng)的說明胡控。實(shí)際上我們在程序中使用。都是使用高級 Api 來操作旁趟。后續(xù)我們在用別的文章來說明昼激。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锡搜,隨后出現(xiàn)的幾起案子橙困,更是在濱河造成了極大的恐慌,老刑警劉巖耕餐,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凡傅,死亡現(xiàn)場離奇詭異,居然都是意外死亡肠缔,警方通過查閱死者的電腦和手機(jī)夏跷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩砰,“玉大人拓春,你說我怎么就攤上這事⊙怯纾” “怎么了硼莽?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煮纵。 經(jīng)常有香客問我懂鸵,道長,這世上最難降的妖魔是什么行疏? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任匆光,我火速辦了婚禮,結(jié)果婚禮上酿联,老公的妹妹穿的比我還像新娘终息。我一直安慰自己夺巩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布周崭。 她就那樣靜靜地躺著柳譬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪续镇。 梳的紋絲不亂的頭發(fā)上美澳,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音摸航,去河邊找鬼制跟。 笑死,一個胖子當(dāng)著我的面吹牛酱虎,可吹牛的內(nèi)容都是我干的雨膨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逢净,長吁一口氣:“原來是場噩夢啊……” “哼哥放!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爹土,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤甥雕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胀茵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體社露,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年琼娘,在試婚紗的時候發(fā)現(xiàn)自己被綠了峭弟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡脱拼,死狀恐怖瞒瘸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熄浓,我是刑警寧澤情臭,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站赌蔑,受9級特大地震影響俯在,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃惯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一跷乐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趾浅,春花似錦愕提、人聲如沸馒稍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筷黔。三九已至,卻和暖如春仗颈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椎例。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工挨决, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人订歪。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓脖祈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刷晋。 傳聞我的和親對象是個殘疾皇子盖高,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容