国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

這篇具有很好參考價(jià)值的文章主要介紹了Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 前言

閑來無事,發(fā)現(xiàn)上一篇ES博客還是去年9月份寫的中文ik分詞器 pinyin 首字母 search_as_you_type 組合使用,該篇文章還挖了一個(gè)大坑沒有填,快一年了,是時(shí)候填下坑了。

2. 期望的效果

針對(duì)股票查詢這個(gè)特點(diǎn)場(chǎng)景,再結(jié)合一般使用者的搜索習(xí)慣,暫時(shí)確定如下7種期望效果。

2.1 中文名稱

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

2.2 全稱拼音首字母

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

2.3 中文簡(jiǎn)稱

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

2.4 簡(jiǎn)稱拼音首字母

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

2.5 拼音

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

2.6 中文+拼音

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

2.7 股票編號(hào)

Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

3. 放棄search_as_you_type類型

上一篇博客Elasticsearch教程(34)中介紹了search_as_you_type類型,通過反復(fù)的實(shí)驗(yàn)驗(yàn)證,感覺search_as_you_type類型并不符合當(dāng)前的場(chǎng)景,主要是不夠靈活,對(duì)于簡(jiǎn)稱“中行”、“建行”的支持不好。所以放棄使用它了,轉(zhuǎn)而使用IK分詞器 + pinyin分詞器。
search_as_you_type類型對(duì)“建設(shè)銀行”的處理如下:

字段 說明
name 按照 mapping 中的配置進(jìn)行分析。 如果未配置分析器,則使用索引的默認(rèn)分詞器
name ._2gram 用大小為 2 的 shingle token filter 分詞器進(jìn)行分詞
name ._3gram 用大小為 3 的 shingle token filter 分詞器進(jìn)行分詞
name ._index_prefix 用 edge ngram token filter 包裝上面的 name ._3gram 的分詞器

下面對(duì)name = "建設(shè)銀行"這個(gè)短語分析

字段 分析后結(jié)果
name “建” 、“設(shè)”、“銀”、“行”
name ._2gram “建 設(shè)”、“設(shè) 銀”、“銀 行”
name ._3gram “建 設(shè) 銀”、“設(shè) 銀 行”
name ._index_prefix “建”、"建 "、“建 設(shè)”、"建 設(shè) "、“建 設(shè) 銀” 等等

4. pinyin分詞器的多音字的錯(cuò)誤修改

網(wǎng)上關(guān)于pinyin分詞器的安裝和使用的博客特別多,這里我就不贅述了。但是我得說一個(gè)非常重要的問題,目前我寫博客時(shí)最新的版本8.x還是有這樣的問題。雖然GitHub上,已經(jīng)有人提出了這個(gè)Issue,但是目前還沒有修復(fù),所以我們就自己動(dòng)手手動(dòng)改改吧。

就是多音字“銀行”的“行”,pinyin分詞器會(huì)把“yin hang”錯(cuò)誤的轉(zhuǎn)成“yin xing”,當(dāng)你測(cè)試“中國銀行”時(shí)它是對(duì)的,但是“建設(shè)銀行”時(shí)就又錯(cuò)了。不信的話你自己試試看。

這個(gè)時(shí)候需要修改下圖中的jar包解壓出來
Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞
然后修改如下圖中文件polyphone.txt,注意千萬不要一下子把"yin xing"替換成"yin hang"。

因?yàn)椤半[形”、“銀杏”這些詞的拼音就是"yin xing"。這個(gè)你需要手動(dòng)一個(gè)一個(gè)看好了改,我不確定這個(gè)問題是nlp-lang的問題還是pinyin分詞器作者改的問題,我看nlp-lang1.7的源代碼這個(gè)文件里“銀行”確實(shí)是對(duì)的"yin hang"。

改好后,再重新打成nlp-lang-1.7.jar包,替換上圖的那個(gè)nlp-lang-1.7.jar文件,然后重啟ES就行啦。
Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞

5. 配置同義詞文件和自定義字典

1 同義詞

在ES的config目錄下,新建analysis文件夾,再創(chuàng)建synonyms.txt,配置如下同義詞

建設(shè)銀行,建行
中國銀行,中行
中信證券,中信,中證
中水漁業(yè),中漁,中水
蘇州科達(dá),科達(dá)

2 自定義字典

在ik的config目錄下創(chuàng)建ext.dic文本文件,添加一些自定義的擴(kuò)展詞
Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞
修改如下的配置文件,指定擴(kuò)展字典的文件名
Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞
上面操作執(zhí)行好了后,一定要重啟ES,否則是不生效的。

6. 設(shè)計(jì)ES文檔結(jié)構(gòu)

ES的文檔設(shè)計(jì)如下,這就是一個(gè)簡(jiǎn)單的以學(xué)習(xí)為目的實(shí)驗(yàn)性設(shè)計(jì),所以設(shè)計(jì)很簡(jiǎn)陋。

  • 別人博客會(huì)設(shè)計(jì)tokenizer為ik,filter為pinyin,但是我實(shí)驗(yàn)下來不是很理想(針對(duì)我的場(chǎng)景而言)
  • 對(duì)于ik和pinyin我是分開的,中文+pinyin時(shí)用"name.pinyin",純中文用"name.ik"或"name"
  • 對(duì)于name主字段,“analyzer”:“standard”,原因我在上篇博客解釋了,有使用的場(chǎng)景
  • 對(duì)于name子字段,"keyword"特殊情況使用
  • “firstLetter”,“shortName”,"shortNameFirstLetter"在代碼中我沒有用到,考慮后期優(yōu)化先加著
  • 對(duì)于無需聚合和排序的keyword,加下"doc_values":false,出于性能優(yōu)化的目的
PUT pigg_stock_base
{
    "settings":{
        "analysis":{
            "analyzer":{
                "pinyin_analyzer":{
                    "tokenizer":"my_pinyin"
                },
                "ik_max_syno":{
                    "tokenizer":"ik_max_word",
                    "filter":"my_synonym"
                },
                "ik_smart_syno":{
                    "tokenizer":"ik_smart",
                    "filter":"my_synonym"
                }
            },
            "tokenizer":{
                "my_pinyin":{
                    "type":"pinyin",
                    "keep_first_letter":true,
                    "keep_separate_first_letter":true,
                    "keep_full_pinyin":true,
                    "keep_original":false,
                    "limit_first_letter_length":16,
                    "lowercase":true,
                    "remove_duplicated_term":true
                }
            },
            "filter":{
                "my_synonym":{
                    "type":"synonym",
                    "synonyms_path":"analysis/synonyms.txt"
                }
            }
        }
    },
    "mappings":{
        "properties":{
            "name":{
                "type":"text",
                "analyzer":"standard",
                "fields":{
                    "keyword":{
                        "type":"keyword",
                        "ignore_above":256,
                        "doc_values":false
                    },
                    "pinyin":{
                        "type":"text",
                        "analyzer":"pinyin_analyzer"
                    },
                    "ik":{
                        "type":"text",
                        "analyzer":"ik_max_syno",
                        "search_analyzer":"ik_smart_syno"
                    }
                }
            },
            "firstLetter":{
                "type":"keyword",
                "doc_values":false
            },
            "shortName":{
                "type":"keyword",
                "doc_values":false
            },
            "shortNameFirstLetter":{
                "type":"keyword",
                "doc_values":false
            },
            "code":{
                "type":"keyword"
            }
        }
    }
}

插入測(cè)試數(shù)據(jù)

PUT pigg_stock_base/_doc/1
{
  "name": "中國銀行",
  "firstLetter": "zgyh",
  "shortName": ["中行"],
  "shortNameFirstLetter": ["zh"],
  "code": "601988"
}

PUT pigg_stock_base/_doc/2
{
  "name": "中國石油",
  "firstLetter": "zgsy",
  "shortName": ["中石油"],
  "shortNameFirstLetter": ["zsy"],
  "code": "601857"
}

PUT pigg_stock_base/_doc/3
{
  "name": "建設(shè)銀行",
  "firstLetter": "jsyh",
  "shortName": ["建行"],
  "shortNameFirstLetter": ["jh"],
  "code": "601939"
}

PUT pigg_stock_base/_doc/4
{
  "name": "中信證券",
  "firstLetter": "zxzq",
  "shortName": ["中信","中證"],
  "shortNameFirstLetter": ["zx","zz"],
  "code": "600030"
}

PUT pigg_stock_base/_doc/5
{
  "name": "中信建設(shè)",
  "firstLetter": "zxjs",
  "shortName": [],
  "shortNameFirstLetter": [],
  "code": "601066"
}

PUT pigg_stock_base/_doc/6
{
  "name": "中水漁業(yè)",
  "firstLetter": "zsyy",
  "shortName": ["中水"],
  "shortNameFirstLetter": ["zs"],
  "code": "000798"
}

7. 測(cè)試查詢DSL語句

GET pigg_stock_base/_search
{
  "query": {
    "match": {
        "name": {
        "query": "中水漁業(yè)",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "中國銀行",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.ik": {
        "query": "建設(shè)銀行",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name": {
        "query": "中國銀",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "中國銀",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "中國yh",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "中國yinh",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "中國yinhang",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "zgyh",
        "operator": "and"
      }
    }
  }
}

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name.pinyin": {
        "query": "yh",
        "operator": "and"
      }
    }
  }
}

8. 代碼

對(duì)于后端代碼我就不放了,因?yàn)槭菍W(xué)習(xí)ES的代碼,有很多地方要優(yōu)化,我拼接ES查詢語句用的是之前我博客Elasticsearch教程(27) ES拼接查詢條件的工具類提到的工具,這次又加了matchAnd,主要是為了提供如下的查詢:

GET pigg_stock_base/_search
{
  "query": {
    "match": {
      "name": {
        "query": "中銀行",
        "operator": "and"
      }
    }
  }
}

前端我用的Vue3 + Element-Plus,其實(shí)今年我的學(xué)習(xí)的目標(biāo)是啥也可以不學(xué),但是一定要把Vue3學(xué)會(huì)使用。

<script lang="ts">
export default {
  name: "StockBase"
}
</script>

<template>
  <div class="app-container">
    <el-select
        filterable
        remote
        reserve-keyword
        placeholder="中文/首字母/拼音/代碼"
        :remote-method="handleSearch"
        :loading="loading"
    >
      <el-option
          v-for="item in options"
          :key="item.code"
          :label="item.name + '(' + item.code + ')'"
          :value="item.id"
      />
    </el-select>
  </div>
</template>

<script setup lang="ts">
import {ref, reactive} from 'vue'
import {listStockBaseByKeyword} from '@/api/system/stockBase';
import {StockBase} from "@/types/api/system/stockBase";

const loading = ref(false);
const options = ref<StockBase[]>([])

//const dataState = reactive({});

function handleSearch(keyword: string) {
  if (keyword) {
    loading.value = true;
    setTimeout(() => {
      loading.value = false
      listStockBaseByKeyword(keyword).then(({data}) => {
            options.value = data
          }
      );
    }, 200)
  } else {
    options.value = []
  }
}
</script>

<style scoped>

</style>

9. 結(jié)語

這個(gè)功能主要是為了學(xué)習(xí)ES的分詞器的使用,后端代碼有很多優(yōu)化的地方,比如考慮用ES的異步查詢或折疊查詢collapse,所以沒有必要放后端代碼。

還有前端Vue3真的很重要,比Vue2添加了不少功能,光看文檔不動(dòng)手是沒有用的,只有不斷寫頁面才能真的學(xué)會(huì)前端。文章來源地址http://www.zghlxwxcb.cn/news/detail-406344.html

到了這里,關(guān)于Elasticsearch教程(35) ik中文分詞器+pinyin拼音分詞器+同義詞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch - 基于 拼音分詞器 和 IK分詞器 模擬實(shí)現(xiàn)“百度”搜索框自動(dòng)補(bǔ)全功能

    ElasticSearch - 基于 拼音分詞器 和 IK分詞器 模擬實(shí)現(xiàn)“百度”搜索框自動(dòng)補(bǔ)全功能

    目錄 一、自動(dòng)補(bǔ)全 1.1、效果說明 1.2、安裝拼音分詞器 1.3、自定義分詞器 1.3.1、為什么要自定義分詞器 1.3.2、分詞器的構(gòu)成 1.3.3、自定義分詞器 1.3.4、面臨的問題和解決辦法 問題 解決方案 1.4、completion suggester 查詢 1.4.1、基本概念和語法 1.4.2、示例 1.4.3、示例(黑馬旅游)

    2024年02月07日
    瀏覽(30)
  • Elasticsearch之ik中文分詞篇

    es在7.3版本已經(jīng)支持中文分詞,由于中文分詞只能支持到單個(gè)字進(jìn)行分詞,不夠靈活與適配我們平常使用習(xí)慣,所以有很多對(duì)應(yīng)中文分詞出現(xiàn),最近使用的是ik分詞器,就說說它吧。 安裝可以百度下有很多教程,需要注意的是ik分詞器的版本要跟es版本對(duì)應(yīng)上,避免出現(xiàn)不必要

    2024年02月02日
    瀏覽(29)
  • 本地elasticsearch中文分詞器 ik分詞器安裝及使用

    本地elasticsearch中文分詞器 ik分詞器安裝及使用

    ElasticSearch 內(nèi)置了分詞器,如標(biāo)準(zhǔn)分詞器、簡(jiǎn)單分詞器、空白詞器等。但這些分詞器對(duì)我們最常使用的中文并不友好,不能按我們的語言習(xí)慣進(jìn)行分詞。 ik分詞器就是一個(gè)標(biāo)準(zhǔn)的中文分詞器。它可以根據(jù)定義的字典對(duì)域進(jìn)行分詞,并且支持用戶配置自己的字典,所以它除了可

    2024年02月05日
    瀏覽(36)
  • docker-compose安裝es以及ik分詞同義詞插件

    docker-compose安裝es以及ik分詞同義詞插件

    目錄 1 前言 2 集成利器Docker 2.1 Docker環(huán)境安裝 2.1.1 環(huán)境檢查 2.1.2 在線安裝 2.1.3 離線安裝 2.2 Docker-Compose的安裝 2.2.1 概念簡(jiǎn)介 2.2.2 安裝步驟 2.2.2.1 二進(jìn)制文件安裝 2.2.2.2 離線安裝 2.2.2.3 yum安裝 3 一鍵安裝ES及Kibana 3.1 yml文件的編寫 3.1.1 elasticsearch.yml配置 3.1.2 kibana.yml配置 3.2 一鍵

    2024年04月23日
    瀏覽(24)
  • Elasticsearch安裝中文分詞器IK Analyzer

    Elasticsearch安裝中文分詞器IK Analyzer

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 本文介紹IK Analyzer分詞器的安裝配置、使用以及ES數(shù)據(jù)遷移。 克隆IK分詞器項(xiàng)目,根據(jù)README的描述選擇對(duì)應(yīng)版本的分支。瀏覽器訪問ES的ip+端口就能看到版本信息,所以我需要切到master分支。 打開pom需要

    2024年02月12日
    瀏覽(32)
  • ElasticSearch 學(xué)習(xí)9 spring-boot ,elasticsearch7.16.1實(shí)現(xiàn)中文拼音分詞搜索

    ElasticSearch 學(xué)習(xí)9 spring-boot ,elasticsearch7.16.1實(shí)現(xiàn)中文拼音分詞搜索

    一、elasticsearch官網(wǎng)下載:Elasticsearch 7.16.1 | Elastic 二、拼音、ik、繁簡(jiǎn)體轉(zhuǎn)換插件安裝 ik分詞:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary. 拼音分詞:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is

    2024年01月22日
    瀏覽(27)
  • es elasticsearch 十 中文分詞器ik分詞器 Mysql 熱更新詞庫

    es elasticsearch 十 中文分詞器ik分詞器 Mysql 熱更新詞庫

    目錄 中文分詞器ik分詞器 介紹 安裝 使用分詞器 Ik分詞器配置文件 Mysql 熱更新詞庫 介紹 中文分詞器按照中文進(jìn)行分詞,中文應(yīng)用最廣泛的是ik分詞器 安裝 官網(wǎng)下載對(duì)應(yīng)版本zip 下載 ?放到 ?plugins 目錄 新建 ik文件夾 考入解析zip 重啟 es //分成小單詞 使用分詞器 ik_max_word分成

    2024年02月07日
    瀏覽(21)
  • Elasticsearch7.8.0版本進(jìn)階——IK中文分詞器

    Elasticsearch7.8.0版本進(jìn)階——IK中文分詞器

    通過 Postman 發(fā)送 GET 請(qǐng)求查詢分詞效果,在消息體里,指定要分析的文本 輸出結(jié)果如下: 由上圖輸出結(jié)果可知,ES 的默認(rèn)分詞器無法識(shí)別中文中測(cè)試、單詞這樣的詞匯,而是簡(jiǎn)單的將每個(gè)字拆完分為一個(gè)詞,這樣的結(jié)果顯然不符合我們的使用要求,所以我們需要下載 ES 對(duì)應(yīng)

    2024年02月01日
    瀏覽(50)
  • Elasticsearch07:ES中文分詞插件(es-ik)安裝部署

    Elasticsearch07:ES中文分詞插件(es-ik)安裝部署

    在中文數(shù)據(jù)檢索場(chǎng)景中,為了提供更好的檢索效果,需要在ES中集成中文分詞器,因?yàn)镋S默認(rèn)是按照英文的分詞規(guī)則進(jìn)行分詞的,基本上可以認(rèn)為是單字分詞,對(duì)中文分詞效果不理想。 ES之前是沒有提供中文分詞器的,現(xiàn)在官方也提供了一些,但是在中文分詞領(lǐng)域,IK分詞器是

    2024年02月03日
    瀏覽(27)
  • elasticsearch安裝中文分詞IK啟動(dòng)異常:java.nio.file.AccessDeniedException

    啟動(dòng)錯(cuò)誤信息如下: 問題原因:plugins中添加的ik目錄沒有權(quán)限; 解決方案:進(jìn)入elasticsearch容器對(duì)應(yīng)plugins目錄下,進(jìn)行 chmod 777 ik 授權(quán)即可。

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包