知識分享之Golang——Bleve的NewIndexMapping解析

知識分享之Golang——Bleve的NewIndexMapping解析

背景

知識分享之Golang篇是我在日常使用Golang時(shí)學(xué)習(xí)到的各種各樣的知識的記錄,將其整理出來以文章的形式分享給大家,來進(jìn)行共同學(xué)習(xí)。歡迎大家進(jìn)行持續(xù)關(guān)注。

知識分享系列目前包含Java、Golang、Linux、Docker等等。

開發(fā)環(huán)境

內(nèi)容

在 bleve 中,IndexMapping 描述了您的數(shù)據(jù)模型應(yīng)該如何被索引。

默認(rèn)索引映射(default IndexMapping)

獲取方式:

indexMapping := bleve.NewIndexMapping()

IndexMappings 包含您想要支持的每種不同類型的文檔的 DocumentMappings。此外,它包含一個 DefaultDocumentMapping,它將用于沒有顯式映射的任何類型。

即我們一個對象中有四個屬性,其中一個屬性做了顯示的DocumentMapping,其他沒有,則其他三個都將存儲在DefaultDocumentMapping中。

Document Type 文件類型

bleve 如何知道文檔的類型?

  1. 如果您的對象實(shí)現(xiàn)了該接口,bleve.Classifier那么 bleve 將使用其Type()方法返回的字符串。
  2. IndexMapping 有一個名為TypeField. 您可以將其設(shè)置為任何文檔路徑,如果該路徑的值是字符串,則該值將用作類型字段。如果您沒有自定義此設(shè)置,則默認(rèn)設(shè)置為“_type”。
  3. 如果無法從 1 或 2 確定類型,則類型將設(shè)置為 IndexMapping 的DefaultType。如果您沒有自定義此設(shè)置,則默認(rèn)設(shè)置為“_default”。

DocumentMappings

現(xiàn)在我們看到了 bleve 如何確定類型,我們可以為我們感興趣的每種類型提供一個自定義的 DocumentMapping。
假設(shè)我們有一個名為blog. 我們可以為這種類型構(gòu)建一個 DocumentMapping 并配置 IndexMapping 以使用它:

blogMapping := bleve.NewDocumentMapping()
indexMapping.AddDocumentMapping("blog", blogMapping)

我們還可以通過設(shè)置 DefaultMapping 字段來設(shè)置一個包羅萬象的映射,該映射將用于沒有顯式映射的任何類型。

FieldMappings 字段映射

文檔是分層的并包含命名字段。這些字段可以是值或嵌套的子文檔。我們通過為其設(shè)置 DocumentMapping 來自定義命名字段的行為。一旦我們?yōu)槊侄蝿?chuàng)建了 DocumentMapping,我們就可以將 0 個或多個 FieldMappings 附加到它。FieldMappings 描述了我們希望如何解釋字段以及我們希望插入索引的內(nèi)容。

假設(shè)我們的博客文檔有一個字符串字段,name并且我們想對這個字段使用英語分析器。

nameFieldMapping := bleve.NewTextFieldMapping()
nameFieldMapping.Analyzer = "en"
blogMapping.AddFieldMappingsAt("name", nameFieldMapping)

現(xiàn)在假設(shè)我們的博客文檔有一個嵌套結(jié)構(gòu),author使用子字段name和來描述字段email。這次假設(shè)我們想要索引(默認(rèn))但不存儲作者姓名。我們希望從該_all字段中排除電子郵件地址。

author := bleve.NewDocumentMapping()
authorNameFieldMapping := bleve.NewTextFieldMapping()
authorNameFieldMapping.Store = false
author.AddFieldMappingsAt("name", authorFieldNameMapping)
authorEmailFieldMapping := bleve.NewTextFieldMapping()
authorEmailFieldMapping.IncludeInAll = false
author.AddFieldMappingsAt("email", authorEmailFieldMapping)
blog.AddSubDocumentMapping("author", author)

這顯示了 FieldMapping 中一些其他標(biāo)志的使用。這是清單:

Index - 索引此字段,默認(rèn)為 true
Store - 存儲此字段,默認(rèn)為 true
IncludeTermVectors - 包括該字段的術(shù)語向量,默認(rèn)為 true
IncludeInAll - 在名為 的復(fù)合字段中包含此字段_all,默認(rèn)為 true

我理解的這段是我們假設(shè)有一個文件,并且這個文件有各種各樣的屬性,其中文件名、作者、上傳人、我們都可以使用該類方式進(jìn)行設(shè)置為單獨(dú)的field,便于索引時(shí)快速使用,后續(xù)我們進(jìn)行編寫測試demo進(jìn)行調(diào)試代碼看是否是這樣的。

Text Field 特定選項(xiàng)

Analyzer - 用于該字段的命名分析器
如果未指定顯式分析器,則可以在多個級別上配置默認(rèn)分析器。

  1. 每個 DocumentMapping 都有一個字段DefaultAnalyzer。這意味著您可以覆蓋每個子文檔的默認(rèn)分析器。
  2. IndexMapping 也有一個DefaultAnalyzer(默認(rèn)分詞器).
    將DefaultAnalyzer使用與字段匹配的最長路徑的配置。

Date Field 特定選項(xiàng)

DateFormat - 將用于解析存儲為字符串的日期的 DateTimeParser 的名稱
您可以在 IndexMapping 對象中配置 DefaultDateTimeParser。

依舊按照文件來講,我們可以將上傳時(shí)間或文件的修改時(shí)間使用這個特定的時(shí)間類型,這樣我們進(jìn)行范圍搜索時(shí)就可以有效進(jìn)行搜索了。

理解Default Type與Default Mapping

當(dāng) Bleve 無法確定特定文檔是哪種類型時(shí),它會自動分配 DefaultType。

一旦 Bleve 確定了類型,它就會查找與此類型名稱匹配的 DocumentMapping。如果沒有為此類型顯式配置的 DocumentMapping,則使用 DefaultMapping。

DefaultType 將默認(rèn)為“_default”,而 DefaultMapping 將默認(rèn)為空的默認(rèn) DocumentMapping。

考慮來自啤酒搜索示例應(yīng)用程序的示例。該映射描述了“啤酒”和“啤酒廠”兩種類型。對于這些中的每一個,都提供了一個明確的 DocumentMapping。如果您嘗試索引缺少 type 字段的文檔,它將被分配類型“_default”。然后 Bleve 查看是否有為“_default”配置的映射。沒有,所以 Bleve 繼續(xù)使用 DefaultMapping。

本文聲明:

88x31.png

知識共享許可協(xié)議
本作品由 cn華少 采用 知識共享署名-非商業(yè)性使用 4.0 國際許可協(xié)議 進(jìn)行許可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評論 2 374

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