前言:現(xiàn)在想要實(shí)現(xiàn)在elasticsearch中類似于mysql的like查詢方式,有下面幾種方法可以參考
建議:wildcard方法是純純的like查詢方式平替,但是性能差,上百GB的數(shù)據(jù)量后就會(huì)很慢。根據(jù)自己業(yè)務(wù)量需求,前面兩種方式能解決的情況下盡量用前面兩種方式。前兩種方式可以修改索引細(xì)粒度逐步靠近like查詢效果。
一、match方式查詢
1、前言:
- match方式是會(huì)將輸入篩選的內(nèi)容先分詞,匹配庫(kù)中的數(shù)據(jù)記錄的分詞內(nèi)容,匹配成功則會(huì)返回。
- 這種方式由于使用到了分詞,根據(jù)自己的數(shù)據(jù)量確定分詞細(xì)粒度,如果想要貼近like,ngram分詞器細(xì)粒度可設(shè)置成1
- 此查詢適用于文本搜索場(chǎng)景,可以匹配文檔中的任意一個(gè)詞,但無(wú)法保證匹配的詞語(yǔ)在文檔中是相鄰的
- 在匹配長(zhǎng)文本時(shí),匹配的結(jié)果可能會(huì)受到文本長(zhǎng)度的影響,導(dǎo)致查詢結(jié)果不準(zhǔn)確
2、es查詢命令
下面命令是篩選fileName中含有2010的記錄
注意:由于match會(huì)分詞后查詢,所以fileName中含有2,0,1這些字符的記錄也會(huì)返回
POST es_test/_search
{
"track_total_hits": true,
"size": 1000,
"query": {
"match": {
"fileName": "2010"
}
}
}
二、match_phrase方式查詢
1、前言
- match_phrase查詢是一種基于分詞的短語(yǔ)匹配查詢,它可以匹配多個(gè)關(guān)鍵字,并保證這些關(guān)鍵字在文檔中是相鄰的
- 此方式查詢內(nèi)容過(guò)長(zhǎng)時(shí)效率會(huì)變慢,注意這方面的限制
- 輸入的內(nèi)容會(huì)被當(dāng)做一個(gè)完整的短語(yǔ)進(jìn)行匹配。比如輸入的是2010,只會(huì)查詢包含完整短語(yǔ)"2010"的文檔。如果某個(gè)文檔中包含了"2010年"或者"在2010年度"等,這些文檔是無(wú)法被匹配出來(lái)的
2、es查詢命令
下面命令是篩選fileName中后綴為.mp4的記錄
POST es_test/_search
{
"track_total_hits": true,
"size": 1000,
"query": {
"match_phrase": {
"fileName": ".mp4"
}
}
}
三、wildcard方式查詢
1、前言
- Wildcard查詢是一種基于通配符的查詢方式,通配符包括 *(匹配任意字符)和 ?(匹配單個(gè)字符)
- Wildcard查詢性能相對(duì)較低,因?yàn)樗鼤?huì)掃描整個(gè)索引來(lái)找到匹配的結(jié)果
2、es查詢命令
此命令是查詢fileName中包含mp4的記錄
POST es_test/_search
{
"track_total_hits": true,
"size": 1000,
"query": {
"wildcard": {
"fileName": "*mp4*"
}
}
}
四、綜合方式復(fù)雜查詢
上面是單個(gè)查詢方式的用法,如果顯示更友好,可以下面方式優(yōu)化
1、需求場(chǎng)景
現(xiàn)在想要實(shí)現(xiàn)如下需求,根據(jù)百度查詢效果一樣的,輸入一個(gè)內(nèi)容,完全匹配的排前面,部分匹配的排后面
2、思路
用match_phrase方式查詢完全匹配的內(nèi)容,用match查詢部分匹配的內(nèi)容,并分別加權(quán)
3、es查詢命令
下面命令是fileName中完整包含2010字段的排前面,加權(quán)10,部分包含2010字段的排后面,加權(quán)5,es查詢結(jié)果不sort的情況下默認(rèn)會(huì)按分?jǐn)?shù)排序文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-721417.html
POST es_test/_search
{
"track_total_hits": true,
"size": 1000,
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match_phrase": {
"fileName": "2010"
}
}
],
"boost": 10
}
},
{
"bool": {
"must": [
{
"match": {
"fileName": "2010"
}
}
],
"boost": 5
}
}
]
}
}
}
如果有其他建議或問(wèn)題意見(jiàn),歡迎留言交流?。?!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-721417.html
到了這里,關(guān)于elasticsearch7.17.3 實(shí)現(xiàn)類似mysql的like查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!