1. 程式人生 > >elasticsearch 利用ik分詞搜尋

elasticsearch 利用ik分詞搜尋

1.不使用ik分詞的情況

map

"article": {
    "properties": {
            "author": {
                "store": true,
                "type": "string"
            },
            "id": {
                "index": "not_analyzed",
                "type": "string"
            },
            "title": {
                "store": true,
                "type": "string"
            },
            "content": {
                "store": true,
                "type": "string"
            }
    }
}

搜尋

POST /test/article/_search
{
  "query": {
    "match": {
      "content": "武當山"
    }
  },
  "highlight": {
    "fields": {
      "content": {}
    }
  }
}

結果(只顯示部分高亮查詢結果)

"highlight": {
"content": [
"是一怔。靜虛師太為人精細,素知西華子的毛包脾氣,還不怎樣。唐文亮卻雙眼一翻,瞪著俞蓮舟道:“俞二俠,此話可真?”俞蓮舟還未答話,西華子已搶著道:“人家<em>武</em><em>當</em>派已和天鷹教結成了親家,張翠<em>山</em>做了殷天正的女婿"
,
"。”唐文亮道:“是非曲直,儘可三個月後再論,但謝遜那惡賊藏身何處,還須請張五俠先行示明。”張翠<em>山</em>搖頭道:“此刻實不便說。”唐文亮雖極不滿,但想<em>武</em><em>當</em>派既和天鷹教聯手,倒也真惹不起,然而公道自在人心,且看他三"
,
":“師妹,走罷!”他本和俞蓮舟同船而來,這麼一來,顯是將<em>武</em><em>當</em>派<em>當</em>作了敵人。俞蓮舟不動聲色,客客氣氣的送到船頭,說道:“我們回<em>山</em>稟明師尊,便送英雄宴的請帖過來。”殷素素忽道:“西華道長,我有一件事請教。”西"
,
"位堂主,相煩稟報殷教主,三月後<em>武</em>昌黃鶴樓頭之會,他老人家若是不棄,務請駕臨。今日咱們便此別過。五弟,你隨我去見恩師嗎?”張翠<em>山</em>道:“是!”殷素素聽俞蓮舟這話竟是要她夫妻分離,<em>當</em>下擡頭瞧了瞧天,又低頭瞧"
,
":“這不關他的事,都是我殺的。”  俞蓮舟望了她一眼,目光中流露出極痛恨的神色,但這目光一閃即隱,臉上隨即回覆平和,說道:“我原知五弟決不會胡亂殺人。為了這事,少林派曾三次遣人上<em>武</em><em>當</em><em>山</em>來理論,但五弟突然"
]
}

可見在不加ik分詞的情況下 “武當山”這個詞會被拆成單個字進行搜尋

2.加ik分詞的情況下

map

"article": {
"properties": {
"author": {
"store": true,
"type": "string"
},
"id": {
"index": "not_analyzed",
"type": "string"
},
"title": {
"store": true,
"type": "string"
},
"content": {
"analyzer": "ik",
"store": true,
"type": "string"
}
}
}

搜尋

POST /test/article/_search
{
  "query": {
    "match": {
      "content": "武當山"
    }
  },
  "highlight": {
    "fields": {
      "content": {}
    }
  }
}

結果

"highlight": {
"content": [
":“這不關他的事,都是我殺的。”  俞蓮舟望了她一眼,目光中流露出極痛恨的神色,但這目光一閃即隱,臉上隨即回覆平和,說道:“我原知五弟決不會胡亂殺人。為了這事,少林派曾三次遣人上<em>武當山</em>來理論,但五弟突然"
,
"有何動靜,正遲疑間,俞蓮舟道:“岸上灌木之中,刀光閃爍,伏得有人。前邊蘆葦中必有敵舟。”  殷素素遊目四顧,但見四下裡靜悄悄的絕無異狀,心想只怕是你眼花了罷?忽聽得俞蓮舟朗聲說道:“<em>武當山</em>俞二、張五"
,
"!”俞蓮舟道:“不,今晚不走,明天一早再走。”張翠<em>山</em>微一轉念,已明白了他的心意,登時豪氣勃發,說道:“不錯!此處離本<em>山</em>已不過兩日之程,咱師兄弟再不濟,也不能墮了師門的威風。在<em>武當山</em>腳下,兀自朝宿晚行的趕路避"
,
"老者,空著雙手。第二騎的乘者卻是個豔裝少婦,左手提著一對雙刀。兩騎馬停在大道正中,擋住了去路。張翠<em>山</em>強抑怒氣,在馬背上抱拳說道:“<em>武當山</em>俞二、張五這廂有禮,請問老爺子尊姓大名。”那老者皮笑肉不笑的說道"
,
",銀鉤鐵筆雖然上下揮舞,其實裝模作樣,只須護住督脈諸穴及足少陽膽經諸穴,其餘身上穴道,不必理會。  泉建男愈鬥精神愈長,大聲吆喝,威風凜凜。張翠<em>山</em>心道:“憑著這點兒武功,居然也到<em>武當山</em>腳下來撒野"
]
}

此時“武當山”會被當成一個詞來進行搜尋

當搜尋不常見的詞時

POST /test/article/_search
{
  "query": {
    "match": {
      "content": "一線峽畔"
    }
  },
  "highlight": {
    "fields": {
      "content": {}
    }
  }
}
"highlight": {
"content": [
"人,已到了<em>一線</em><em>峽</em><em>畔</em>。晚輩奉大師兄之命,前來迎接貴派。”  滅絕師太道:“好,還是武當派先到了。可和妖人接過仗麼?”殷梨亭道:“曾和魔教的木、火兩旗交戰三次,殺了幾名妖人,七師弟莫聲谷受了<em>一</em>點傷"
,
"到了<em>一線</em><em>峽</em>麼?”此話<em>一</em>出,殷梨亭和張無忌都是大吃<em>一</em>驚。殷梨亭道:“你打聽我五師哥,為了何事?”蛛兒紅暈生臉,低聲道:“我是想知道他的公子張無忌,是不是也來了。”張無忌自是更加吃驚,心道:“原來她早知道"
,
"激斗的人形,奔到近處,見是三個白袍道人手持兵刃,在圍攻<em>一</em>箇中年漢子。三個道人左手衣袖上都繡著<em>一</em>個紅色火焰,顯是魔教中人。那中年漢子手舞長劍,劍光閃爍,和三個道人鬥得甚是激烈,以<em>一</em>敵三,絲毫不露下風"
,
"。張無忌腿傷早愈,但仍是假裝不能行走,坐在雪橇之中,好讓峨嵋派諸人不加提防,以便俟機和蛛兒脫身逃走。這時他眼光被身前<em>一</em>名峨嵋男弟子擋住了,須得側身探頭,方能見到那四人相鬥。只見那中年漢子長劍越使越快"
,
",突然間轉身過來,<em>一</em>聲呼喝,刷的<em>一</em>劍,在<em>一</em>名魔教道人胸口穿過。峨嵋眾人喝彩聲中,張無忌忍不住輕聲驚呼,這<em>一</em>招“順水推舟”,正是武當劍法的絕招,使這<em>一</em>招劍法的中年漢子,卻是武當派的六俠殷梨亭。  峨嵋群弟子"
]
}

可見整個詞仍然被分開來搜尋

將這個詞加入字典

一線峽畔

重啟elasticsearch,再搜尋

"highlight": {
"content": [
"人,已到了<em>一線峽畔</em>。晚輩奉大師兄之命,前來迎接貴派。”  滅絕師太道:“好,還是武當派先到了。可和妖人接過仗麼?”殷梨亭道:“曾和魔教的木、火兩旗交戰三次,殺了幾名妖人,七師弟莫聲谷受了<em>一</em>點傷"
,
"到了<em>一線</em><em>峽</em>麼?”此話<em>一</em>出,殷梨亭和張無忌都是大吃<em>一</em>驚。殷梨亭道:“你打聽我五師哥,為了何事?”蛛兒紅暈生臉,低聲道:“我是想知道他的公子張無忌,是不是也來了。”張無忌自是更加吃驚,心道:“原來她早知道"
,
"激斗的人形,奔到近處,見是三個白袍道人手持兵刃,在圍攻<em>一</em>箇中年漢子。三個道人左手衣袖上都繡著<em>一</em>個紅色火焰,顯是魔教中人。那中年漢子手舞長劍,劍光閃爍,和三個道人鬥得甚是激烈,以<em>一</em>敵三,絲毫不露下風"
,
"。張無忌腿傷早愈,但仍是假裝不能行走,坐在雪橇之中,好讓峨嵋派諸人不加提防,以便俟機和蛛兒脫身逃走。這時他眼光被身前<em>一</em>名峨嵋男弟子擋住了,須得側身探頭,方能見到那四人相鬥。只見那中年漢子長劍越使越快"
,
",突然間轉身過來,<em>一</em>聲呼喝,刷的<em>一</em>劍,在<em>一</em>名魔教道人胸口穿過。峨嵋眾人喝彩聲中,張無忌忍不住輕聲驚呼,這<em>一</em>招“順水推舟”,正是武當劍法的絕招,使這<em>一</em>招劍法的中年漢子,卻是武當派的六俠殷梨亭。  峨嵋群弟子"
]
}

可見該詞已經被組合在一起,但仍然有被拆開的情況

修改map將content欄位改成ik_smart

"article": {
"properties": {
"author": {
"store": true,
"type": "string"
},
"id": {
"index": "not_analyzed",
"type": "string"
},
"title": {
"store": true,
"type": "string"
},
"content": {
"analyzer": "ik_smart",
"store": true,
"type": "string"
}
}
}

在搜尋

"highlight": {
"content": [
"到了<em>一線峽畔</em>。晚輩奉大師兄之命,前來迎接貴派。”  滅絕師太道:“好,還是武當派先到了。可和妖人接過仗麼?”殷梨亭道:“曾和魔教的木、火兩旗交戰三次,殺了幾名妖人,七師弟莫聲谷受了一點傷"
]
}

此時這個詞不會被拆分 而是作為一個整體進行搜尋