日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

laravel 分词搜索匹配度_elasticsearch基础笔记9-elasticsearch 词项全文搜索

發(fā)布時間:2024/7/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 laravel 分词搜索匹配度_elasticsearch基础笔记9-elasticsearch 词项全文搜索 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

es的核心功能就是搜索和分析。那么我們看看搜索相關(guān)內(nèi)容

1、搜索機制

在進入搜索之前,會對查詢體根據(jù)情況進行分析和處理。

2、有哪些常用搜索類型

全文查詢 詞項查詢 復(fù)合查詢 嵌套查詢 位置查詢 特殊查詢等。

我們常用到的就是前三種,學(xué)起來簡單,用起來特別難。

3、看看這三種查詢的區(qū)別。

詞項查詢用來查找指定字段中,包含給定的單詞的文檔,詞項查詢不會被解析,只有查詢詞和文檔中的詞精確匹配才會被搜索到,常見的應(yīng)用場景為地名,人名等。我們的 準(zhǔn)字號。

全文查詢通常用于在全文進行搜索,全文查詢的被查詢字段是要被分析和分解的。

復(fù)合查詢,就是把一些簡單的查詢組合在一起查詢,實現(xiàn)更復(fù)雜的查詢需求,此外,復(fù)合查詢還可以控制另一個查詢的行為。

我們先以term query 和matchquery 來進行對比講解。(下面兩部分第一項)

準(zhǔn)備工作:

我們重新建一個sku索引,加入相應(yīng)的數(shù)據(jù);

然后,我們確認下,新增的數(shù)據(jù)都已經(jīng)存進來了

GET sku/_search

好,接下來我們來看看不同的查詢出來的效果是怎么樣的。

4、詞項查旬

首先,我們查詢下我們剛才錄入的一個文檔,

我們發(fā)現(xiàn),并沒有查到我們剛才存入的數(shù)據(jù),這個就有點尷尬了。

那到底是什么原因呢?在想想我們對詞項查詢的定義,詞項查詢內(nèi)容不會被解析,只有精確匹配到的才會被查詢出來。那我們也就是說,需要我們的sku索引的相應(yīng)字段要精確的匹配到"三黃片"這個詞。那我們我們接下看看看索引字段是怎么存的。分詞之后是什么樣子的。

上面就是"三黃片"這個詞在name這個字段上的分詞結(jié)果。我們發(fā)現(xiàn),分詞結(jié)果是三、黃、片三個單獨的詞,而我們用"三黃片"整個詞來匹配是匹配不到的。

如果我們將我們的搜索詞改為"三",那么應(yīng)該就會匹配到響應(yīng)的數(shù)據(jù)如下:

同樣的情況,我們用全文查詢查詢一次看一下效果:參考match query內(nèi)容部分

terms查詢是term的升級版,用來查詢文檔中包含多個詞項,詞項間是或的關(guān)系。

比如,我們查剛才的sku 包含"三","jiaonang"的,會發(fā)現(xiàn)同時查到了兩條記錄。

prefix 查詢用來查詢某個字段中以給定的字段開頭的文檔。

這個查詢中我們發(fā)現(xiàn),對于所查詢的字段,還是用了分詞的。

query

于此類似的還有 wildcard query 為通配符查詢,這個查詢支持單字或者多字的通配符查詢。查詢過程中,用'?'來匹配一個任意字符,'*'用來匹配0個或者多個字符。

exists 查詢會查詢出至少一個非空值的文檔。

5、全文查詢

同樣的情況,我們用全文查詢查詢一次看一下效果:

我們會發(fā)現(xiàn),這個時候,無論我們怎么查,都能查到結(jié)果。這就是兩種查詢的區(qū)別。

match查詢會對查詢語句進行分詞,分詞之后查詢語句中任何一個詞項被匹配,文檔就會被搜索到。

如果,想要所有詞項都被搜索到才返回,則使用 and連接。 這就需要改換下寫法(上面的寫法是簡單的寫法)

完成寫法如下:

使用了and連接,也就是對查詢內(nèi)容進行分詞,所有的詞項都被命中后才返回。我們查詢"三皇片"就不會查找到任何內(nèi)容。查詢"三片"就會查找到相應(yīng)內(nèi)容。

對于上面的搜索結(jié)構(gòu)我們可以簡單的分析一下,我們可以把match{}對象中的內(nèi)容表述為這次匹配查詢的參數(shù)(官方:top-level parameters for match)。"field"是要查詢的字段,field{}對象內(nèi)容部,是對field的參數(shù)。

這個參數(shù)可以有很多。具體如下:

query: 你要查詢的內(nèi)容,這個字段是必須的。

analyzer: 分詞器(非必須),在搜索的時候可以制定分詞器,這個時候就會由指定的分詞器來分析你要的關(guān)鍵詞。比如我們把剛才的搜索加上'keyword'分詞,就不會搜到結(jié)果。如果我們不指定分詞器,則會默認使用索引字段設(shè)定好的分詞器。

fuzziness: 允許模糊搜索。 分析出來的關(guān)鍵詞之間允許相隔最大的字符數(shù)量。

max_expansions : 查詢的擴展詞最大數(shù)量。默認為50。

operator :對查詢文本的解析操作類型,包含兩個值:OR AND 。

該查詢首先會把要查詢的內(nèi)容分詞,分詞器可以自行定義。同時,文檔內(nèi)容必須滿足兩個條件才能被查詢到:

1、分詞后的所有的詞項都要被命中

2、字段中的詞項和查詢中的詞項順序必須一致。

這里我們用兩個查詢看一下差別,我們用match查詢 查詢 '三片黃',發(fā)現(xiàn)是可以查詢到結(jié)果的。

然后,我們換 match_phrase查詢,則查詢不到結(jié)果,因為分詞后,順序不匹配。

match_phrase_prefix查詢

match_phrase_prefix查詢和 match_phrase比較像,不同的是最后一個詞支持前綴匹配。比如我們查詢'hello world' 這個詞。用 、'hello w'也可以查詢到。

查詢,

multi_match可以看做是match的升級版,用于搜索多個字段。

我們可以再sku索引上增加一個字段,然后,新增一個商品來試驗一下.(為甚不新增一個字段,然后直接修改新增字段這個值?可自己試驗一次),我們發(fā)現(xiàn),在'name'、'fullname'這兩個字段上搜國藥,是可以搜索到結(jié)果的。

同時,multi_match在字段名稱上,還支持通配符查詢。如下:

另外,multi_match在查詢的時候,還可以通過指數(shù)符號指定字段的權(quán)重值。如下查詢,我們會發(fā)現(xiàn)返回的sorce值變大了。

常用詞項查詢,算是一種稍微高級點的查詢。所以,想要用好,還是要理解比較多的內(nèi)容。必須解下停止詞(順手可以把同義詞看了)。這個查詢比較適合于停用詞在語境中有重要作用的場景。按照官方例子來說:not 是個常見的停用詞。happy 和 not happy 對比下,not的意義就很重要了。

所以,提供了一種解決方案,把query分詞后的詞項分成了重要詞項和不重要詞項。查詢的時候,先查詢重要詞項。一般來說重要詞項都是低頻詞。然后,在進行高頻詞搜索,這次只計算第一次匹配的文檔評分。

詞項是高頻還是低頻,可以自行通過cutoff_frequency來設(shè)定。

更高深的用法,可參看官方文檔。這個查詢可以很好的適應(yīng)特定領(lǐng)域的停用詞。

字符串查詢,是對查詢內(nèi)容按運算規(guī)則進行分析分解的查詢。比如:查詢 "xxxxx AND yyyy "會被分解 query xxxx and query yyyyy的形式。這個查詢支持的參數(shù)非常多,具體參考官方文檔。對es搜索原理非常理解估計才能用的飛起。

這個是可以直接拿來用的字符串查詢,查詢在解析語句的過程中,不會拋出錯誤。用起放心些。

為了能加深意向,大家可多來幾個例子,看到底能不能搜得到:

name: 分詞器: 搜索類型: 搜索:

java編程思想 ik term java 思想 編程思想

總結(jié)

以上是生活随笔為你收集整理的laravel 分词搜索匹配度_elasticsearch基础笔记9-elasticsearch 词项全文搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。