最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解elasticsearch實(shí)現(xiàn)基于拼音搜索

 更新時(shí)間:2023年01月16日 08:56:02   作者:huan1993  
這篇文章主要為大家介紹了詳解elasticsearch實(shí)現(xiàn)基于拼音搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1、背景

一般情況下,有些搜索需求是需要根據(jù)拼音和中文來(lái)搜索的,那么在elasticsearch中是如何來(lái)實(shí)現(xiàn)基于拼音來(lái)搜索的呢?可以通過(guò)elasticsearch-analysis-pinyin分析器來(lái)實(shí)現(xiàn)。

2、安裝拼音分詞器

# 進(jìn)入 es 的插件目錄
cd /usr/local/es/elasticsearch-8.4.3/plugins
# 下載
wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v8.4.3/elasticsearch-analysis-pinyin-8.4.3.zip
# 新建目錄
mkdir analysis-pinyin
# 解壓
mv elasticsearch-analysis-pinyin-8.4.3.zip analysis-pinyin && cd analysis-pinyin && unzip elasticsearch-analysis-pinyin-8.4.3.zip && rm -rvf elasticsearch-analysis-pinyin-8.4.3.zip
cd ../ && chown -R es:es analysis-pinyin
# 啟動(dòng)es
/usr/local/es/elasticsearch-8.4.3/bin/elasticsearch -d

3、拼音分詞器提供的功能

拼音分詞器提供如下功能

每個(gè)選項(xiàng)的含義 可以通過(guò) 文檔中的例子來(lái)看懂。

4、簡(jiǎn)單測(cè)試一下拼音分詞器

4.1 dsl

GET _analyze
{
  "text": ["我是中國(guó)人"],
  "analyzer": "pinyin"
}

"analyzer": "pinyin" 此處的pinyin是拼音分詞器自帶的。

4.2 運(yùn)行結(jié)果

從圖片上,實(shí)現(xiàn)了拼音分詞,但是這個(gè)不一定滿足我們的需求,比如沒(méi)有中文了,單個(gè)的拼音(比如:wo)是沒(méi)有什么用的,需要對(duì)拼音分詞器進(jìn)行定制化。

5、es中分詞器的組成

elasticsearch中分詞器analyzer由如下三個(gè)部分組成:

  • character filters: 用于在tokenizer之前對(duì)文本進(jìn)行處理。比如:刪除字符,替換字符等。
  • tokenizer: 將文本按照一定的規(guī)則分成獨(dú)立的token。即實(shí)現(xiàn)分詞功能。
  • tokenizer filter:tokenizer輸出的詞條做進(jìn)一步的處理。比如: 同義詞處理,大小寫(xiě)轉(zhuǎn)換、移除停用詞,拼音處理等。

6、自定義一個(gè)分詞器實(shí)現(xiàn)拼音和中文的搜索

需求: 自定義一個(gè)分詞器,即可以實(shí)現(xiàn)拼音搜索,也可以實(shí)現(xiàn)中文搜索。

1、創(chuàng)建mapping

PUT /test_pinyin
{
  "settings": {
    // 分析階段的設(shè)置
    "analysis": {
      // 分析器設(shè)置
      "analyzer": {
        // 自定義分析器,在tokenizer階段使用ik_max_word,在filter上使用py
        "custom_analyzer": {
          "tokenizer": "ik_max_word",
          "filter": "custom_pinyin"
        }
      },
      // 由于不滿足pinyin分詞器的默認(rèn)設(shè)置,所以我們基于pinyin
      // 自定義了一個(gè)filter,叫py,其中修改了一些設(shè)置
      // 這些設(shè)置可以在pinyin分詞器官網(wǎng)找到
      "filter": {
        "custom_pinyin": {
          "type": "pinyin",
          // 不會(huì)這樣分:劉德華 > [liu, de, hua]
          "keep_full_pinyin": false,
          // 這樣分:劉德華 > [liudehua]
          "keep_joined_full_pinyin": true,
          // 保留原始token(即中文)
          "keep_original": true,
          // 設(shè)置first_letter結(jié)果的最大長(zhǎng)度,默認(rèn)值:16
          "limit_first_letter_length": 16,
          // 當(dāng)啟用此選項(xiàng)時(shí),將刪除重復(fù)項(xiàng)以保存索引,例如:de的> de,默認(rèn)值:false,注意:位置相關(guān)查詢可能受影響
          "remove_duplicated_term": true,
          // 如果非漢語(yǔ)字母是拼音,則將其拆分為單獨(dú)的拼音術(shù)語(yǔ),默認(rèn)值:true,如:liudehuaalibaba13zhuanghan- > liu,de,hua,a,li,ba,ba,13,zhuang,han,注意:keep_none_chinese和keep_none_chinese_together應(yīng)首先啟用
          "none_chinese_pinyin_tokenize": false
        }
      }
    }
  },
  // 定義mapping
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        // 創(chuàng)建倒排索引時(shí)使用的分詞器
        "analyzer": "custom_analyzer",
        // 搜索時(shí)使用的分詞器,搜索時(shí)不使用custom_analyzer是為了防止 詞語(yǔ)的拼音一樣,但是中文含義不一樣,導(dǎo)致搜索錯(cuò)誤。 比如: 科技 和 客機(jī),拼音一樣,但是含義不一樣
        "search_analyzer": "ik_smart"
      }
    }
  }
}

注意:可以看到 我們的 name字段 使用的分詞器是 custom_analyzer,這個(gè)是我們?cè)谏弦徊蕉x的。但是搜索的時(shí)候使用的是 ik_smart,這個(gè)為甚么會(huì)這樣呢?
假設(shè)我們存在如下2個(gè)文本 科技強(qiáng)國(guó)和 這是一架客機(jī), 那么科技和客機(jī)的拼音是不是就是一樣的。 這個(gè)時(shí)候如果搜索時(shí)使用的分詞器也是custom_analyzer那么,搜索科技的時(shí)候客機(jī)也會(huì)搜索出來(lái),這樣是不對(duì)的。因此在搜索的時(shí)候中文就以中文搜,拼音就以拼音搜。

{
  "name": {
    "type": "text",
    "analyzer": "custom_analyzer",
    "search_analyzer": "ik_smart"
  }
}

當(dāng) analyzersearch_analyzer的值都是custom_analyzer,搜索時(shí)也會(huì)通過(guò)拼音搜索,這樣的結(jié)果可能就不是我們想要的。

2、插入數(shù)據(jù)

PUT /test_pinyin/_bulk
{"index":{"_id":1}}
{"name": "科技強(qiáng)國(guó)"}
{"index":{"_id":2}}
{"name": "這是一架客機(jī)"}
{"index":{"_id":3}}

3、搜索數(shù)據(jù)

參考文檔

1、github.com/medcl/elast…

以上就是詳解elasticsearch實(shí)現(xiàn)基于拼音搜索的詳細(xì)內(nèi)容,更多關(guān)于elasticsearch 拼音搜索的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL安裝與idea的連接實(shí)現(xiàn)

    MySQL安裝與idea的連接實(shí)現(xiàn)

    本文主要介紹了MySQL安裝與idea的連接實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring自動(dòng)注入失敗的解決方法

    Spring自動(dòng)注入失敗的解決方法

    這篇文章主要介紹了Spring自動(dòng)注入失敗的解決方法,幫助大家更好的理解和學(xué)習(xí)使用Spring框架,感興趣的朋友可以了解下
    2021-05-05
  • Spring Validator接口校驗(yàn)與全局異常處理器

    Spring Validator接口校驗(yàn)與全局異常處理器

    這篇文章主要介紹了Spring Validator接口校驗(yàn)與全局異常處理器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java實(shí)現(xiàn)字符串倒序輸出的常用方法小結(jié)

    Java實(shí)現(xiàn)字符串倒序輸出的常用方法小結(jié)

    這篇文章主要介紹了Java實(shí)現(xiàn)字符串倒序輸出的常用方法,通過(guò)三個(gè)實(shí)例從不同角度實(shí)現(xiàn)該功能,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • Spring jcl及spring core源碼深度解析

    Spring jcl及spring core源碼深度解析

    這篇文章主要為大家介紹了Spring jcl及spring core源碼深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • springboot+dubbo啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connected的問(wèn)題及解決方案

    springboot+dubbo啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connect

    這篇文章主要介紹了springboot+dubbo項(xiàng)目啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connected的問(wèn)題,本文給大家定位問(wèn)題及解決方案,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • java基于Socket做一個(gè)簡(jiǎn)單下載器

    java基于Socket做一個(gè)簡(jiǎn)單下載器

    這篇文章主要為大家詳細(xì)介紹了java如何基于Socket制作一個(gè)簡(jiǎn)單下載器,感興趣的小伙伴們可以參考一下
    2016-08-08
  • java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密的代碼

    java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密的代碼

    這篇文章給大家分享java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密,通過(guò)實(shí)例代碼文字相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2019-11-11
  • mybatis實(shí)現(xiàn)動(dòng)態(tài)升降序的問(wèn)題小結(jié)

    mybatis實(shí)現(xiàn)動(dòng)態(tài)升降序的問(wèn)題小結(jié)

    文章介紹了如何在MyBatis的XML文件中實(shí)現(xiàn)動(dòng)態(tài)排序,使用$符號(hào)而不是#符號(hào)來(lái)引用變量,以避免SQL注入,同時(shí),強(qiáng)調(diào)了在Java代碼中進(jìn)行防注入處理的重要性,感興趣的朋友一起看看吧
    2025-02-02
  • SpringBoot整合Swagger框架過(guò)程解析

    SpringBoot整合Swagger框架過(guò)程解析

    這篇文章主要介紹了SpringBoot整合Swagger框架過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論

临沧市| 舟山市| 阳曲县| 汤原县| 华阴市| 建湖县| 惠州市| 安义县| 沾益县| 西华县| 铁力市| 滦平县| 个旧市| 永川市| 巴东县| 汾西县| 尼玛县| 河池市| 琼海市| 建平县| 泽库县| 祁门县| 博野县| 修文县| 辽宁省| 湟中县| 玉环县| 加查县| 德清县| 阳江市| 海淀区| 县级市| 建阳市| 武山县| 大余县| 五家渠市| 增城市| 吉木乃县| 石狮市| 榕江县| 保山市|