1. 程式人生 > >Elasticsearch1.x 拼音分詞實現全拼首字母中文混合搜尋

Elasticsearch1.x 拼音分詞實現全拼首字母中文混合搜尋

一、外掛簡介

elasticsearch-analysis-lc-pinyin是一款elasticsearch拼音分詞外掛,可以支援按照全拼、首字母,中文混合搜尋。

首先舉個栗子說明下,我們在淘寶搜尋框中輸入“jianpan” 可以搜尋到關鍵字包含“鍵盤”的商品。不僅僅輸入全拼,有時候我們輸入首字母、拼音和首字母、中文和首字母的混合輸入,比如:“鍵pan”、“j盤”、“jianp”、“jpan”、“jianp”、“jp”  等等,都應該匹配到鍵盤。通過elasticsearch-analysis-lc-pinyin這個外掛就能做到類似的搜尋


二、安裝外掛

elasticsearch-analysis-lc-pinyin一共有兩個版本分別是1.4.5和2.2.2,和es的版本對應

1.4.5 這個版本對應ES1.X

2.2.2這個版本對應ES2.X

請根據需要安裝對應的版本,下面地址中壓縮包已經包含了這兩個版本

當然也可以自己下載elasticsearch-analysis-lc-pinyin的原始碼自己maven  build出來,這樣可以避免版本衝突

git 地址:http://git.oschina.net/music_code_m/elasticsearch-analysis-lc-pinyin

如下,我已將下載下來的包放在 /home/chennan/soft 目錄下,下面我將以elasticsearch1.4.5為例安裝elasticsearch-analysis-lc-pinyin-1.4.5拼音分詞器


進入到es的plugins目錄,下面是未安裝時的樣子


接著開啟終端命令列執行如下命令安裝外掛

./../bin/plugin --install analysis-lc-pinyin --url file:/home/chennan/soft/elasticsearch-analysis-lc-pinyin-1.4.5.zip


粗線上面結果就表示安裝成功了 ^ ^,安裝完成後會在plugins目錄下生成一個 analysis-lc-pinyin的目錄,如下


接下來配置elasticsearch.yml,在末尾加上如下配置,如下因為我也安裝了IK分詞器所以配置這樣,如果你沒有安裝IK可以將下面ik的部分刪除

index:
  analysis:
    analyzer:
      ik:
          alias: [ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider
      ik_max_word:
          type: ik
          use_smart: false
      ik_smart:
          type: ik
          use_smart: true
      lc:
         alias: [lc_analyzer]
         type: org.elasticsearch.index.analysis.LcPinyinAnalyzerProvider
      lc_index:
         type: lc
         analysisMode: index
      lc_search:
         type: lc
         analysisMode: search

然後啟動es,這裡我啟動兩個節點。從啟動日誌中可以看到es成功載入了拼音外掛,如下


到這裡,外掛就安裝完成了。我們可以通過一個簡單的curl命令來測試分詞器時候正常工作

curl -XGET '192.168.0.107:9200/_analyze?analyzer=lc_search&pretty' -d 'dafeiji'

輸入“dafeiji”可以切分出來“da”、“fei”、“ji” 證明一切都OK啦


接下來就來試試藉助這個拼音分詞器來執行搜尋,看看效果

1、首先建立一個索引 ,然後執行putmapping , 這裡的索引名叫index,type叫fulltext,其中content這個欄位採用拼音分詞。注意這裡用到兩個不同的分詞器

索引過程採用:lc_index分詞器

搜尋過程採用:lc_search分詞器

curl -XPUT http://localhost:9200/index

curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
    "fulltext": {
             "_all": {
            "index_analyzer": "lc_index",
            "search_analyzer": "lc_search",
            "term_vector": "no",
            "store": "false"
        },
        "properties": {
            "content": {
                "type": "string",
                "store": "no",
                "term_vector": "with_positions_offsets",
                "index_analyzer": "lc_index",
                "search_analyzer": "lc_search",
                "include_in_all": "true",
                "boost": 8
            }
        }
    }
}'



然後索引幾條資料,這裡索引的4個公司的名稱,陸金所、阿里巴巴、騰訊、百度、如下:



接下來執行幾個搜尋,查詢的DSL像這樣

{
  "query": {
    "match": {
      "content": {
        "query": "bai度",
        "analyzer": "lc_search",
        "type": "phrase"
      }
    }
  },
  "highlight": {
    "pre_tags": [
      "<tag1>"
    ],
    "post_tags": [
      "</tag1>"
    ],
    "fields": {
      "content": {}
    }
  }
}

搜尋“bai度”


搜尋“阿li巴b”


搜尋“ljs”


搜尋“alibb”


搜尋“lujinsuo”


下面使用es 客戶端來做查詢

@Test
    public void testPinyinSearch() {
        final String index = "index";
        final String type = "fulltext";
        SearchRequestBuilder requestBuilder = elasticIndexOperateHelper.getClient().prepareSearch(index).setTypes(type);

        QueryBuilder pinyinSearch = QueryBuilders
                .matchQuery("content", "lu金s")
                .type(MatchQueryBuilder.Type.PHRASE)
                .analyzer("lc_search")
                .zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE);

        SearchResponse response = requestBuilder
                .setQuery(pinyinSearch)
                .setHighlighterPreTags("</tag1>")
                .setHighlighterPostTags("<tag1>")
                .addHighlightedField("content")
                .execute().actionGet();
        System.out.println(response);

    }

查詢結果如下:


相關推薦

Elasticsearch1.x 拼音實現字母中文混合搜尋

一、外掛簡介 elasticsearch-analysis-lc-pinyin是一款elasticsearch拼音分詞外掛,可以支援按照全拼、首字母,中文混合搜尋。 首先舉個栗子說明下,我們在淘寶搜尋框中輸入“jianpan” 可以搜尋到關鍵字包含“鍵盤”的商品。不僅僅輸入

java之獲取中文/字母工具(大小寫轉換)

java之獲取中文全拼/首字母工具(大小寫轉換) 需要jar包pinyin4j支援 maven地址 <dependency> <groupId>com.belerweb</groupId> <artif

java獲取中文/字母工具以及大小寫轉換

pom: <!--漢轉拼音 -->         <dependency>             <groupId>com.belerweb</groupId>             <artifactId>

lucene6.6+拼音+ik實現

原來專案使用的是solr進行建立索引與查詢,最近想改為lucene。對於最新版的lucene網上的資料沒有solr多,並且solr很多功能直接配置就可以使用,但是lucene都要通過api進行封裝使用。下面是自己使用lucene6.6+拼音分詞和ik中文分詞實現的功能:

一種拼音器的JAVA實現

原理很簡單,就是模式匹配。根據中文全拼的特點,即聲母和韻母配對,首先列舉出所有的聲母,再分別列舉出所有聲母對應的韻母集,分詞的過程就是遍歷匹配的過程。 publicclass SpellTool {      static String result = "";//

elasticsearch實現中文拼音混合查詢+CompletionSuggestion

引言 之前已經介紹瞭如何搭建elasticsearch服務端和簡單的索引建立,和中文分詞的支援。今天我們來說一說如何實現elasticsearch同時實現中文分詞和pinyin分詞。並且實現類似百度搜索欄的搜尋建議的功能。 混合查詢 實現混合查詢有很多

elasticsearch ik實現 中文拼音、同義詞搜尋

EasticSearch版本:1.5.2   2.1、在elasticsearch的plugins目錄下,新建analysis-pinyin資料夾,解壓上述壓縮包,將裡面的    放到analys

elasticsearch 拼音+ik,spring data elasticsearch 拼音

maven打包 vat tokenizer origin emp 下載源 case remove 解壓 elasticsearch 自定義分詞器 安裝拼音分詞器、ik分詞器   拼音分詞器: https://github.com/medcl/elasticsearch-an

JS實現獲取漢字字母拼音拼音及混拼音的方法

pla 輸入 files sta add 參考 x11 lba odi 本文實例講述了JS實現獲取漢字首字母拼音、全拼音及混拼音的方法。分享給大家供大家參考,具體如下: 這裏需要用到一個js獲取漢字拼音的插件,可點擊此處本站下載。 運行效果如下: 完整示例代碼: ?

Lucene筆記20-Lucene的-實現自定義同義詞器-實現器(良好設計方案)

一、目前存在的問題 在getSameWords()方法中,我們使用map臨時存放了兩個鍵值對用來測試,實際開發中,往往需要很多的這種鍵值對來處理,比如從某個同義詞詞典裡面獲取值之類的,所以說,我們需要一個類,根據key提供近義詞。 為了能更好的適應應用場景,我們先定義一個介面,其中定義一

Lucene筆記19-Lucene的-實現自定義同義詞器-實現

一、同義詞分詞器的程式碼實現 package com.wsy; import com.chenlb.mmseg4j.Dictionary; import com.chenlb.mmseg4j.MaxWordSeg; import com.chenlb.mmseg4j.analysis.MM

Lucene筆記18-Lucene的-實現自定義同義詞器-思路分析

一、實現自定義同義詞分詞器思路分析 前面文章我們提到同義詞分詞器,這裡我們先來分析下同義詞分詞器的設計思路。 首先我們有一個需要分詞的字串string,通過new StringReader(string)拿到Reader。 使用analyzer.tokenStream("co

基於java版jieba實現的tfidf關鍵詞提取

基於java版jieba分詞實現的tfidf關鍵詞提取 文章目錄 基於java版jieba分詞實現的tfidf關鍵詞提取 為了改善我的 個性化新聞推薦系統的基於內容相似度的推薦演算法效果,我嘗試找尋關鍵詞提取效果可能優於本來使用的ansj的tfi

和我一起打造個簡單搜索之IK以及拼音

生產環境 ast ken ade usr block analyzer osi 繼續 elasticsearch 官方默認的分詞插件,對中文分詞效果不理想,它是把中文詞語分成了一個一個的漢字。所以我們引入 es 插件 es-ik。同時為了提升用戶體驗,引入 es-pinyi

和我一起打造個簡單搜尋之IK以及拼音

elasticsearch 官方預設的分詞外掛,對中文分詞效果不理想,它是把中文詞語分成了一個一個的漢字。所以我們引入 es 外掛 es-ik。同時為了提升使用者體驗,引入 es-pinyin 外掛。本文介紹這兩個 es 外掛的安裝。 環境 本文以及後續 es 系列文章都基於 5.5.3 這個版本的 el

Elasticsearch拼音和IK的安裝及使用

一、Es外掛配置及下載 1.IK分詞器的下載安裝 關於IK分詞器的介紹不再多少,一言以蔽之,IK分詞是目前使用非常廣泛分詞效果比較好的中文分詞器。做ES開發的,中文分詞十有八九使用的都是IK分詞器。 下載地址:https://github.com/medcl/elasticsearch-analysis

es配置中文拼音

1.簡介 es預設使用standard分詞器 es還有其他分詞器比如simple writespace language 2.配置中文分詞器(需先安裝git maven unzip) git clone https://github.com/medcl/elasticse

ElasticSearch學習筆記(二)IK器和拼音器的安裝

ElasticSearch是自帶分詞器的,但是自帶的分詞器一般就只能對英文分詞,對英文的分詞只要識別空格就好了,還是很好做的(ES的這個分詞器和Lucene的分詞器很想,是不是直接使用Lucene的就不知道),自帶的分詞器對於中文就只能分成一個字一個字,這個顯然

使用 Elasticsearch ik實現同義詞搜尋

1、首先需要安裝好Elasticsearch 和elasticsearch-analysis-ik分詞器 2、配置ik同義詞 Elasticsearch 自帶一個名為 synonym 的同義詞 filter。為了能讓 IK 和 synonym 同時工作,我們需要定義新的

Solr6.5配置中文IKAnalyzer和拼音pinyinAnalyzer (二)

 之前在 Solr6.5在Centos6上的安裝與配置 (一) 一文中介紹了solr6.5的安裝。這篇文章主要介紹建立Solr的Core並配置中文IKAnalyzer分詞和拼音檢索。 一、建立Core: 1、首先在solrhome(solrhome的路徑和配置見Solr6.5在Centos6上的安裝與配置