聽說你還沒掌握 Normalizer 的使用方法雕凹?


在 Elasticsearch 中處理字符串類型的數據時,如果我們想把整個字符串作為一個完整的 term 存儲汽抚,我們通常會將其類型 type 設定為 keyword抓狭。但有時這種設定又會給我們帶來麻煩,比如同一個數據再寫入時由于沒有做好清洗造烁,導致大小寫不一致否过,比如 appleApple兩個實際都是 apple膨蛮,但當我們去搜索 apple時卻無法返回 Apple的文檔叠纹。要解決這個問題,就需要 Normalizer出場了敞葛。廢話不多說誉察,直接上手看!

1. 上手

我們先來重現一下開篇的問題

PUT test_normalizer
{
  "mappings": {
    "doc":{
      "properties": {
        "type":{
          "type":"keyword"
        }
      }
    }
  }
}

PUT test_normalizer/doc/1
{
  "type":"apple"
}

PUT test_normalizer/doc/2
{
  "type":"Apple"
}

# 查詢一 
GET test_normalizer/_search
{
  "query": {
    "match":{
      "type":"apple"
    }
  }
}

# 查詢二
GET test_normalizer/_search
{
  "query": {
    "match":{
      "type":"aPple"
    }
  }
}

大家執(zhí)行后會發(fā)現查詢一返回了文檔1惹谐,而查詢二沒有文檔返回持偏,原因如下圖所示:

img
  1. Docs寫入 Elasticsearch時由于 typekeyword,分詞結果為原始字符串
  2. 查詢 Query 時分詞默認是采用和字段寫時相同的配置,因此這里也是 keyword氨肌,因此分詞結果也是原始字符
  3. 兩邊的分詞進行匹對鸿秆,便得出了我們上面的結果

2. Normalizer

normalizerkeyword的一個屬性,可以對 keyword生成的單一 Term再做進一步的處理怎囚,比如 lowercase卿叽,即做小寫變換。使用方法和自定義分詞器有些類似恳守,需要自定義考婴,如下所示:

DELETE test_normalizer
# 自定義 normalizer
PUT test_normalizer
{
  "settings": {
    "analysis": {
      "normalizer": {
        "lowercase": {
          "type": "custom",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "type": {
          "type": "keyword"
        },
        "type_normalizer": {
          "type": "keyword",
          "normalizer": "lowercase"
        }
      }
    }
  }
}

PUT test_normalizer/doc/1
{
  "type": "apple",
  "type_normalizer": "apple"
}

PUT test_normalizer/doc/2
{
  "type": "Apple",
  "type_normalizer": "Apple"
}
# 查詢三
GET test_normalizer/_search
{
  "query": {
    "term":{
      "type":"aPple"
    }
  }
}

# 查詢四
GET test_normalizer/_search
{
  "query": {
    "term":{
      "type_normalizer":"aPple"
    }
  }
}

我們第一步是自定義了名為 lowercase的 normalizer,其中filter 類似自定義分詞器中的 filter 催烘,但是可用的種類很少沥阱,詳情大家可以查看官方文檔。然后通過 normalizer屬性設定到字段type_normalizer中伊群,然后插入相同的2條文檔考杉。執(zhí)行發(fā)現策精,查詢三無結果返回,查詢四返回2條文檔崇棠。

問題解決了咽袜!我們來看下是如何解決的

img
  1. 文檔寫入時由于加入了 normalizer,所有的 term都會被做小寫處理
  2. 查詢時搜索詞同樣采用有 normalizer的配置,因此處理后的 term也是小寫的
  3. 兩邊分詞匹對易茬,就得到了我們上面的結果

3. 總結

本文通過一個實例來給大家講解了 Normalizer的實際使用場景酬蹋,希望對大家有所幫助及老!


轉載自:
https://elasticsearch.cn/article/775

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末抽莱,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子骄恶,更是在濱河造成了極大的恐慌食铐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僧鲁,死亡現場離奇詭異虐呻,居然都是意外死亡,警方通過查閱死者的電腦和手機寞秃,發(fā)現死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門斟叼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人春寿,你說我怎么就攤上這事朗涩。” “怎么了绑改?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵谢床,是天一觀的道長。 經常有香客問我厘线,道長识腿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任造壮,我火速辦了婚禮渡讼,結果婚禮上,老公的妹妹穿的比我還像新娘耳璧。我一直安慰自己成箫,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布楞抡。 她就那樣靜靜地躺著伟众,像睡著了一般。 火紅的嫁衣襯著肌膚如雪召廷。 梳的紋絲不亂的頭發(fā)上凳厢,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天账胧,我揣著相機與錄音,去河邊找鬼先紫。 笑死治泥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的遮精。 我是一名探鬼主播居夹,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼本冲!你這毒婦竟也來了准脂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤檬洞,失蹤者是張志新(化名)和其女友劉穎狸膏,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體添怔,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡湾戳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了广料。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾脑。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艾杏,靈堂內的尸體忽然破棺而出韧衣,到底是詐尸還是另有隱情,我是刑警寧澤糜颠,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布汹族,位于F島的核電站,受9級特大地震影響其兴,放射性物質發(fā)生泄漏顶瞒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一元旬、第九天 我趴在偏房一處隱蔽的房頂上張望榴徐。 院中可真熱鬧,春花似錦匀归、人聲如沸坑资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袱贮。三九已至,卻和暖如春体啰,著一層夾襖步出監(jiān)牢的瞬間攒巍,已是汗流浹背嗽仪。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柒莉,地道東北人闻坚。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像兢孝,于是被迫代替她去往敵國和親窿凤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容

  • 在 Elasticsearch 中處理字符串類型的數據時,如果我們想把整個字符串作為一個完整的 term 存儲喷市,我...
    rockybean閱讀 1,412評論 0 2
  • Solr&ElasticSearch原理及應用 一相种、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,285評論 1 17
  • 1.空有大志向,總以為自己搞得定箫措,一開始以為在仁濟這樣的大醫(yī)院我可以做的很好腹备,我也很想成為優(yōu)秀的人,結果自己懶惰斤蔓,...
    半天云閱讀 281評論 0 0
  • 今天是什么日子 起床:7:00 昨日就寢:23:30 天氣:雨植酥,從昨天夜里下到早晨。 心情:不算壞 紀念日:不知道...
    雪山牧場閱讀 166評論 0 2
  • 他想: 等到我畫完這幅畫弦牡,是的友驮,大約應該在3天之后,一畫完這幅畫驾锰,就立刻去商城4層買下那身已經盯了好久的休閑套裝卸留,...
    wwfm19閱讀 189評論 0 1