欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

elasticsearch如何使用Ngram實(shí)現(xiàn)任意位數(shù)手機(jī)號(hào)搜索

 更新時(shí)間:2024年05月17日 09:35:38   作者:it噩夢(mèng)  
Ngram是一種基于統(tǒng)計(jì)語(yǔ)言模型的算法,Ngram基本思想是將文本里面的內(nèi)容按照字節(jié)大小進(jìn)行滑動(dòng)窗口操作,形成長(zhǎng)度是N的字節(jié)片段序列,這篇文章主要介紹了elasticsearch使用Ngram實(shí)現(xiàn)任意位數(shù)手機(jī)號(hào)搜索,需要的朋友可以參考下

Ngram自定義分詞案例

當(dāng)對(duì)keyword類(lèi)型的字段進(jìn)行高亮查詢(xún)時(shí),若值為123asd456,查詢(xún)sd4,則高亮結(jié)果是<em>123asd456<em>。那么,有沒(méi)有辦法只對(duì)sd4高亮呢?用一句話(huà)來(lái)概括問(wèn)題:明明只想查詢(xún)ID的一部分,但高亮結(jié)果是整個(gè)ID串,此時(shí)應(yīng)該怎么辦?

實(shí)戰(zhàn)問(wèn)題拆解

###定義索引
PUT my_index_0602
{
  "mappings": {
    "properties": {
      "phoneNum": {
        "type": "keyword"
      }
    }
  }
}
####批量寫(xiě)入數(shù)據(jù)
POST my_index_0602/_bulk
{"index":{"_id":1}}
{"phoneNum":"13511112222"}
{"index":{"_id":2}}
{"phoneNum":"13844248474"}
###執(zhí)行模糊檢索和高亮顯示
POST my_index_0602/_search
{
  "highlight": {
    "fields": {
      "phoneNum": {}
    }
  },
  "query": {
    "bool": {
      "should": [
        {
          "wildcard": {
            "phoneNum": "*1111*"
          }
        }
      ]
    }
  }
}

高亮檢索結(jié)果如下。

也就是說(shuō),整個(gè)字符串都呈現(xiàn)為高亮狀態(tài)了,沒(méi)有達(dá)到預(yù)期。

檢索過(guò)程中選擇使用wildcard是為了解決子串匹配的問(wèn)題,wildcard的實(shí)現(xiàn)邏輯類(lèi)似于MySQL的like模糊匹配。傳統(tǒng)的text標(biāo)準(zhǔn)分詞器,包括中文分詞器ik、英文分詞器english、standard等都不能解決上述子串匹配問(wèn)題。

而實(shí)際業(yè)務(wù)需求是這樣的:一方面要求輸入子串能召回全串;另一方面要求檢索的子串實(shí)現(xiàn)高亮。對(duì)此,只能更換一種分詞來(lái)實(shí)現(xiàn),即Ngram。

Ngram分詞器定義

Ngram分詞定義

Ngram是一種基于統(tǒng)計(jì)語(yǔ)言模型的算法。Ngram基本思想是將文本里面的內(nèi)容按照字節(jié)大小進(jìn)行滑動(dòng)窗口操作,形成長(zhǎng)度是N的字節(jié)片段序列。此時(shí)每一個(gè)字節(jié)片段稱(chēng)為gram。對(duì)所有g(shù)ram的出現(xiàn)頻度進(jìn)行統(tǒng)計(jì),并且按照事先設(shè)定好的閾值進(jìn)行過(guò)濾,形成關(guān)鍵gram列表,也就是這個(gè)文本的向量特征空間。列表中的每一種gram就是一個(gè)特征向量維度。

該模型基于這樣一種假設(shè),第N個(gè)詞的出現(xiàn)只與前面N-1個(gè)詞相關(guān),而與其他任何詞都不相關(guān),整句的概率就是各個(gè)詞出現(xiàn)概率的乘積。這些概率可以通過(guò)直接從語(yǔ)料中統(tǒng)計(jì)N個(gè)詞同時(shí)出現(xiàn)的次數(shù)得到。常用的是二元的Bi-Gram(二元語(yǔ)法)和三元的Tri-Gram(三元語(yǔ)法)。

Ngram分詞示例

以“你今天吃飯了嗎“這一中文句子為例,它的Bi-Gram分詞結(jié)果如下。

Ngram分詞應(yīng)用場(chǎng)景

場(chǎng)景1:文本壓縮、檢查拼寫(xiě)錯(cuò)誤、加速字符串查找、文獻(xiàn)語(yǔ)種識(shí)別。

場(chǎng)景2:自然語(yǔ)言處理自動(dòng)化領(lǐng)域得到新的應(yīng)用。如自動(dòng)分類(lèi)、自動(dòng)索引、超鏈的自動(dòng)生成、文獻(xiàn)檢索、無(wú)分隔符語(yǔ)言文本的切分等。

場(chǎng)景3:自然語(yǔ)言的自動(dòng)分類(lèi)功能。針對(duì)Elasticsearch檢索,Ngram針對(duì)無(wú)分隔符語(yǔ)言文本的分詞(比如手機(jī)號(hào)檢索),可提高檢索效率(相較于wildcard檢索和正則匹配檢索來(lái)說(shuō))

Ngram分詞實(shí)戰(zhàn)

###定義索引
PUT my_index_0603
{
    "settings":{
        "number_of_shards":1,
        "number_of_replicas":0,
        "index.max_ngram_diff" : 10,
        "analysis":{
            "analyzer":{
                "phoneNo_analyzer":{
                    "tokenizer": "phoneNo_analyzer"
                }
            },
            "tokenizer":{
                "phoneNo_analyzer":{
                    "type": "ngram",
                    "min_gram": 4,
                    "max_gram": 11,
                    "token_chars": [
                        "letter","digit"
                    ]
                }
            }
        }
    },
    "mappings":{
        "dynamic":"strict",
        "properties":{
            "phoneNo":{
                "type":"text",
                "analyzer": "phoneNo_analyzer"
            }
        }
    }
}
####批量寫(xiě)入數(shù)據(jù)
POST my_index_0603/_bulk
{"index":{"_id":1}}
{"phoneNo":"13511112222"}
{"index":{"_id":2}}
{"phoneNo":"13844248474"}
POST my_index_0603/_analyze
{
  "analyzer": "phoneNo_analyzer",
  "text": "13511112222"
}
POST my_index_0603/_search
{
  "highlight": {
    "fields": {
      "phoneNo": {}
    }
  },
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "phoneNo": "1111"
          }
        }
      ]
    }
  }
}

到此這篇關(guān)于elasticsearch如何使用Ngram實(shí)現(xiàn)任意位數(shù)手機(jī)號(hào)搜索的文章就介紹到這了,更多相關(guān)elasticsearch任意位數(shù)手機(jī)號(hào)搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • superset在linux和windows下的安裝和部署詳細(xì)教程

    superset在linux和windows下的安裝和部署詳細(xì)教程

    Superset 是 Airbnb開(kāi)源的數(shù)據(jù)探查與可視化平臺(tái),是個(gè)輕量級(jí)的BI工具,開(kāi)發(fā)者可以在其開(kāi)源代碼上根據(jù)需要進(jìn)行二次開(kāi)發(fā)。這篇文章主要介紹了superset在linux和windows下的安裝和部署詳細(xì)教程,需要的朋友可以參考下
    2020-10-10
  • Unicode編碼大揭秘

    Unicode編碼大揭秘

    這篇文章主要介紹了Unicode編碼大揭秘,本文介紹了編碼的歷史,Unicode的出現(xiàn)原因等,需要的朋友可以參考下
    2014-07-07
  • 解決Visual Studio 2019本地不能運(yùn)行Azure Functions

    解決Visual Studio 2019本地不能運(yùn)行Azure Functions

    本文主要介紹了Visual Studio 2019本地不能運(yùn)行Azure Functions的解決方方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Elasticsearch索引的分片分配Recovery使用講解

    Elasticsearch索引的分片分配Recovery使用講解

    這篇文章主要為大家介紹了Elasticsearch索引的分片分配Recovery使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • JAVA IDEA入門(mén)使用手冊(cè)(新手小白必備)

    JAVA IDEA入門(mén)使用手冊(cè)(新手小白必備)

    IDEA的每一個(gè)方面都是為了最大限度地提高開(kāi)發(fā)人員的工作效率而設(shè)計(jì)的,本文主要介紹了JAVA IDEA入門(mén)使用手冊(cè),幫助新手更好的入門(mén),感興趣的可以了解一下
    2021-05-05
  • 一文講清base64編碼原理

    一文講清base64編碼原理

    本文主要介紹了一文講清base64編碼原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 如何配置openai的返回Stream數(shù)據(jù)并轉(zhuǎn)發(fā)到h5頁(yè)面按markdown格式流式輸出(最新推薦)

    如何配置openai的返回Stream數(shù)據(jù)并轉(zhuǎn)發(fā)到h5頁(yè)面按markdown格式流式輸出(最新推薦)

    這篇文章主要介紹了如何配置openai的返回Stream數(shù)據(jù)并轉(zhuǎn)發(fā)到h5頁(yè)面按markdown格式流式輸出,本文通過(guò)示例代碼演示如何使用OpenAI?API來(lái)實(shí)現(xiàn)流式輸出并分段加載,需要的朋友可以參考下
    2023-05-05
  • C++ Go語(yǔ)言實(shí)現(xiàn)將windows和linux文件刪除至回收站

    C++ Go語(yǔ)言實(shí)現(xiàn)將windows和linux文件刪除至回收站

    這篇文章主要為大家詳細(xì)介紹了如何分別使用C++ Go語(yǔ)言實(shí)現(xiàn)將windows和linux文件刪除至回收站,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • bitbucket搭建詳細(xì)過(guò)程記錄

    bitbucket搭建詳細(xì)過(guò)程記錄

    這篇文章主要介紹了bitbucket搭建詳細(xì)過(guò)程記錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • SSL常用專(zhuān)業(yè)縮略語(yǔ)匯總

    SSL常用專(zhuān)業(yè)縮略語(yǔ)匯總

    這篇文章主要介紹了SSL常用專(zhuān)業(yè)縮略語(yǔ)匯總,需要的朋友可以參考下
    2017-09-09

最新評(píng)論