摘要:前言這里聲明漫談我們都知道下有的包的,我們也知道下有封裝更好的包。當(dāng)然這種也是優(yōu)點(diǎn),但是如果用了下的的的話,你會(huì)會(huì)發(fā)現(xiàn)對(duì)于都封裝的很好。故此,我對(duì)下的包進(jìn)行了增強(qiáng)對(duì)進(jìn)行封裝。這里我的實(shí)現(xiàn)也很簡(jiǎn)單,其實(shí)希望有人能有更好的實(shí)現(xiàn)。
前言
這里聲明: elasticsearch -> es
漫談我們都知道Python 下 有es的sdk包的,我們也知道java 下有封裝更好的es包。為什么說(shuō)python 下的就封裝不好呢? 其實(shí)這個(gè)也兩說(shuō),有人就喜歡這樣呢
Python下的es包首先什么都能做,實(shí)現(xiàn)功能完全沒(méi)問(wèn)題。但是對(duì)于 DSL 的話,Python下的es就沒(méi)有封裝了,完全按照es的語(yǔ)法寫查詢語(yǔ)句。當(dāng)然這種也是優(yōu)點(diǎn),但是如果用了Java下的es 的sdk的話,你會(huì)會(huì)發(fā)現(xiàn)對(duì)于DSL 都封裝的很好。
至于封不封裝DSL,其實(shí)也看業(yè)務(wù)復(fù)不復(fù)雜,簡(jiǎn)單的業(yè)務(wù),幾行的DSL 直接寫也沒(méi)什么,但是如果很長(zhǎng)的呢,比如我這樣業(yè)務(wù)的DSL:
{ "size": 1000, "query": { "bool": { "must": [ { "term": { "prod_code": { "value": "JDB" } } }, { "bool": { "must": [], "must_not": [], "should": [ { "bool": { "must": [], "must_not": [], "should": [ { "query_string": { "default_field": "rp_content", "query": "*下了*" } }, { "query_string": { "default_field": "rp_content", "query": "*下款*" } } ], "filter": [] } }, { "nested": { "path": "rp_data", "query": { "bool": { "must": [], "must_not": [], "should": [ { "query_string": { "default_field": "rp_data.rp_content", "query": "*下了*" } }, { "query_string": { "default_field": "rp_data.rp_content", "query": "*下款*" } } ], "filter": [] } } } } ], "filter": [] } } ] } } }
如果是這樣的DSL 直接寫在代碼中,這個(gè)也太長(zhǎng)了吧,而且這還不是全部,只是一部分,對(duì)于這種動(dòng)態(tài)而且復(fù)雜的DSL,直接寫,會(huì)顯得太長(zhǎng)。
故此,我對(duì)Python 下的es包進(jìn)行了增強(qiáng) —— 對(duì)DSL進(jìn)行封裝。項(xiàng)目請(qǐng)點(diǎn)擊:# elasticsearch-python
對(duì)于上面DSL 的封裝調(diào)用結(jié)果是這樣的:
prod_code = "JDB" key = "下了" value = "下了 | 下款" bq = bool_query() bq.must(term_query("prod_code", prod_code)) .must(bool_query() .should(multi_query_string("rp_content", value)) .should(nested_query("rp_data", multi_query_string("rp_data.rp_content", value))) ) print(bq) print(QueryBuilders(bq).size(1000))
這下清爽了很多是吧!
當(dāng)然這個(gè)沒(méi)寫完,對(duì)于聚合還沒(méi)寫,而且query也沒(méi)全部支持,只是把自己用到的給簡(jiǎn)單封裝了下,其實(shí)不知道到底有沒(méi)有人用,沒(méi)人用自己寫再多也就自己玩玩了。這里我的實(shí)現(xiàn)也很簡(jiǎn)單,其實(shí)希望有人能有更好的實(shí)現(xiàn)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/41773.html
閱讀 3058·2021-11-23 09:51
閱讀 3836·2021-11-22 15:29
閱讀 3298·2021-10-08 10:05
閱讀 1625·2021-09-22 15:20
閱讀 1046·2019-08-30 15:56
閱讀 1140·2019-08-30 15:54
閱讀 791·2019-08-26 11:54
閱讀 2693·2019-08-26 11:32