1. 程式人生 > >elasticsearch的實現全文檢索

elasticsearch的實現全文檢索

elasticsearch一個準實時的搜尋引擎,基於lucene構建,它的主要強項還是在全文檢索方面。工作中還是使用到了這部分功能,這裡做一個簡單的總結,可以使初次使用的人很快的配置和使用。
一、全文檢索的概念
首先介紹全文檢索的概念,就是對一篇文章進行索引,可以根據關鍵字搜尋,類似於mysql裡的like語句。
全文索引就是把內容根據詞的意義進行分詞,然後分別建立索引,例如”你們的激情是因為什麼事情來的” 可能會被分詞成:“你們“,”激情“,“什麼事情“,”來“ 等token
這樣當你搜索“你們” 或者 “激情” 都會把這句搜出來。
二、內建分詞器
elasticsearch實現全文索引,首先要確定分詞器,elasticsearch預設有很多分詞器,你可以參考elasticsearch的官方文件。瞭解分詞器主要是怎麼實現的。
你可以使用
curl -XPOST

http://192.168.0.23:9200/fenci/_analyze?analyzer=standard&pretty=true&text=“我是中國人”
命令來了解各種分詞器的分詞效果。
{
“token”: “我”,
“start_offset”: 1,
“end_offset”: 2,
“type”: “”,
“position”: 0
}
,
{
“token”: “是”,
“start_offset”: 2,
“end_offset”: 3,
“type”: “”,
“position”: 1
}
,
{
“token”: “中”,
“start_offset”: 3,
“end_offset”: 4,
“type”: “”,
“position”: 2
}
,
{
“token”: “國”,
“start_offset”: 4,
“end_offset”: 5,
“type”: “”,
“position”: 3
}
,
{
“token”: “人”,
“start_offset”: 5,
“end_offset”: 6,
“type”: “”,
“position”: 4
}
三、中文分詞器
一般中文分詞器一般使用第三方的ik分詞器、mmsegf分詞器和paoding分詞器,他們最初可能構建於lucene,後來移植於elasticsearch。 在最新版的elasticsearch,我主要使用了ik分詞器。
我使用的elsaticsearch是2.3.3,elasticsearch和ik分詞的對應版本:
這裡寫圖片描述

ik分詞的安裝:
去ik分詞的github去下載原始碼用maven編譯:
對應目錄:
這裡寫圖片描述

IndicesAdminClient indicesAdminClient = client.admin().indices();
        AnalyzeAction analyzeAction =  AnalyzeAction.INSTANCE;
        System.out.println("ik分詞分析:"+"中華人民共和國國歌 ");
        AnalyzeRequestBuilder request = new  AnalyzeRequestBuilder(indicesAdminClient,analyzeAction,"text"
,"中華人民共和國國歌"); request.setAnalyzer("ik_max_word"); // request.setAnalyzer("ik_smart"); request.setTokenizer("ik"); // Analyzer(分析器)、Tokenizer(分詞器) List<AnalyzeResponse.AnalyzeToken> listAnalysis = request.execute().actionGet().getTokens(); for( AnalyzeResponse.AnalyzeToken b : listAnalysis ){ System.out.println( b.getTerm() ); }

ik_max_word: 會將文字做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;
這裡寫圖片描述
ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”。
這裡寫圖片描述
可根據需求去選擇所需要的分詞器。