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

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

這篇具有很好參考價(jià)值的文章主要介紹了Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、數(shù)據(jù)聚合

1、聚合的分類

聚合(aggregations)可以實(shí)現(xiàn)對(duì)文檔數(shù)據(jù)的統(tǒng)計(jì)、分析、運(yùn)算。

聚合常見(jiàn)有三類:

  • 桶聚合 Bucket:對(duì)文檔數(shù)據(jù)分組,并統(tǒng)計(jì)每組數(shù)量
    • TermAggregation:按照文檔字段值分組(有點(diǎn)像mysql的group by)
    • Date Histogram:按照日期階梯分組,例如一周為一組,或者一月一組
  • 度量聚合 Metric:對(duì)文檔數(shù)據(jù)做計(jì)算,例如最大值,最小值,平均值等
    • avg:求平均值
    • max:求最大值
    • min:求最小值
    • stats:同時(shí)求max、min、avg、sum等
  • 管道聚合 Pipeline:基于其他聚合結(jié)果再做聚合

參與聚合的字段類型必須是不可分詞的:

  • keyword
  • 數(shù)值
  • 日期
  • 布爾

2、DSL實(shí)現(xiàn)Bucket聚合

現(xiàn)在要統(tǒng)計(jì)所有數(shù)據(jù)中的酒店品牌有幾種,可以根據(jù)酒店品牌的名稱做聚合

aggs代表聚合,與query同級(jí),用aggs的時(shí)候query的作用是做返回,在query范圍下聚合

聚合必須要的三要素是:聚合名稱,聚合類型,聚合字段

可以配置的屬性:

  • size:限制聚合結(jié)果的數(shù)量
  • order:指定聚合結(jié)果排序方式
  • field:指定聚合字段

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

3、DSL實(shí)現(xiàn)Metrics聚合

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

用了mertrics的stats,最大、最小、平均都求,然后再上面order指定根據(jù)平均值排序

4、RestAPI實(shí)現(xiàn)聚合

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

5、案例

實(shí)現(xiàn)對(duì)品牌、城市、星級(jí)的聚合

需求:搜索頁(yè)面的品牌、城市等信息不應(yīng)該是在頁(yè)面寫死,而是通過(guò)聚合索引庫(kù)中的酒店數(shù)據(jù)得來(lái)

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

要用map來(lái)接收,map的key就是城市或者星級(jí)這些,value就是對(duì)應(yīng)的聚合list

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

這樣就可以完成基本的功能了,但會(huì)有個(gè)問(wèn)題:

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

像這樣,如果用戶帶著條件來(lái)查詢的話,比如帶著虹橋來(lái)查詢,我們給用戶篩選條件聚合還是根據(jù)全局索引聚合的,會(huì)先很多別的城市,這些城市沒(méi)有虹橋如果點(diǎn)擊就出問(wèn)題了。所以我們要想辦法改成對(duì)用戶的輸入條件聚合

其實(shí)就是在聚合條件上加查詢條件,限制聚合的范圍。

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

?二、自動(dòng)補(bǔ)全

1、拼音分詞器

要實(shí)現(xiàn)根據(jù)字母做補(bǔ)全,就必須對(duì)文檔按照拼音分詞。

直接去下載拼音分詞器的插件,然后analyzer選pinyin就行

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

2、自定義分詞器

拼音分詞器的問(wèn)題:分的次都是單個(gè)的沒(méi)有什么用,ru、jia這種沒(méi)用的,還有就是全部第一個(gè)小寫,而且我們大多數(shù)情況還是用漢字進(jìn)行分詞,而不是拼音,我們要保留漢字分詞

這個(gè)時(shí)候就必須要自定義分詞器

要自定義分詞器,必須先了解分詞器的組成

  • character filters:在tokenizer之前對(duì)文本進(jìn)行處理,例如刪除字符、替換字符
  • tokenizer:將文本按照一定的規(guī)則切割成詞條(tern),例如keyword就是不分詞
  • tokenizer filter:將tokenizer輸出的詞條做進(jìn)一步處理,例如大小寫轉(zhuǎn)化,同義詞處理,拼音處理

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

所以,我們知道pinyin分詞器不會(huì)進(jìn)行分詞,那么我們就可以先用ik分詞器先分詞,再用pinyin分詞器做處理,就可以得到pinyin的分詞了

但是拼音分詞器會(huì)對(duì)每個(gè)字的首字母結(jié)合的還有會(huì)去中文,這兩個(gè)我們要優(yōu)化

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

?我們?cè)趧?chuàng)建索引的時(shí)候,可以用自定義分詞器,但是在搜索的時(shí)候,就不能使用這個(gè)分詞器了

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游?Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

3、completion suggester查詢

es提供了completion suggester查詢來(lái)實(shí)現(xiàn)自動(dòng)補(bǔ)全功能。這個(gè)查詢會(huì)匹配以用戶輸入內(nèi)容開頭的詞條并返回。為了提高補(bǔ)全查詢的效率,對(duì)文檔中字段的類型有一些約束:

參與補(bǔ)全查詢的字段必須是completion類型(專門做自動(dòng)補(bǔ)全查詢的類型)

字段的內(nèi)容一般是用來(lái)補(bǔ)全的多個(gè)詞條形成的數(shù)組(右圖,如果我們輸入的s,那么可以補(bǔ)全這兩個(gè)數(shù)據(jù),但如果我們輸入w,沒(méi)有等多個(gè)詞條的話就不會(huì)補(bǔ)全,所以分多個(gè)詞條更人性化)

前面是品牌,后面是產(chǎn)品的名稱,一個(gè)產(chǎn)品的都存在一個(gè)數(shù)組里

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

4、案例實(shí)戰(zhàn)

實(shí)現(xiàn)hotel索引庫(kù)的自動(dòng)補(bǔ)全、拼音搜索功能

思路:

  1. 修改hotel索引庫(kù)結(jié)構(gòu),設(shè)置自定義拼音分詞器
  2. 修改索引庫(kù)的name、all字段,使用自定義分詞器
  3. 索引庫(kù)添加一個(gè)新字段suggestion,類型為completion類型,使用自定義的分詞器
  4. 給HotelDoc類添加suggestion字段,內(nèi)容包含brand、business
  5. 重新導(dǎo)入數(shù)據(jù)到hotel庫(kù)

首先,我們先修改索引庫(kù)的數(shù)據(jù)結(jié)構(gòu),要多加一個(gè)completion_analyzer分詞器,這個(gè)分詞器是keyword,代表不分詞,因?yàn)槲覀儏⑴c自動(dòng)補(bǔ)全的都是一個(gè)個(gè)的詞條,這些詞條已經(jīng)是最小了不需要再分詞了,然后再用拼音分詞器變成拼音就好了

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

all的創(chuàng)建索引庫(kù)用的是自定義的拼音結(jié)合的分詞器,搜索的分詞器就用ik

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

因?yàn)檫@個(gè)suggestion是多個(gè)類型的詞條組成的數(shù)組,所以用list,然后品牌和商圈都可以做自動(dòng)補(bǔ)全的內(nèi)容。把想要做自動(dòng)動(dòng)補(bǔ)全的都可以加進(jìn)去。但是這個(gè)商圈,business可能有多個(gè)是用/分割開的,所以我們要進(jìn)一步進(jìn)行拆分

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

然后加入,現(xiàn)在就可以搜索一下試試了

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

然后我們就要用java的客戶端來(lái)操作了?

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游

這樣就能實(shí)現(xiàn)自動(dòng)補(bǔ)全功能了?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429339.html

到了這里,關(guān)于Elasticsearch聚合、自動(dòng)補(bǔ)全 | 黑馬旅游的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包