摘要:前言這里聲明漫談我們都知道下有的包的,我們也知道下有封裝更好的包。當(dāng)然這種也是優(yōu)點(diǎn),但是如果用了下的的的話,你會會發(fā)現(xiàn)對于都封裝的很好。故此,我對下的包進(jìn)行了增強(qiáng)對進(jìn)行封裝。這里我的實(shí)現(xiàn)也很簡單,其實(shí)希望有人能有更好的實(shí)現(xiàn)。
前言
這里聲明: elasticsearch -> es
漫談我們都知道Python 下 有es的sdk包的,我們也知道java 下有封裝更好的es包。為什么說python 下的就封裝不好呢? 其實(shí)這個也兩說,有人就喜歡這樣呢
Python下的es包首先什么都能做,實(shí)現(xiàn)功能完全沒問題。但是對于 DSL 的話,Python下的es就沒有封裝了,完全按照es的語法寫查詢語句。當(dāng)然這種也是優(yōu)點(diǎn),但是如果用了Java下的es 的sdk的話,你會會發(fā)現(xiàn)對于DSL 都封裝的很好。
至于封不封裝DSL,其實(shí)也看業(yè)務(wù)復(fù)不復(fù)雜,簡單的業(yè)務(wù),幾行的DSL 直接寫也沒什么,但是如果很長的呢,比如我這樣業(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 直接寫在代碼中,這個也太長了吧,而且這還不是全部,只是一部分,對于這種動態(tài)而且復(fù)雜的DSL,直接寫,會顯得太長。
故此,我對Python 下的es包進(jìn)行了增強(qiáng) —— 對DSL進(jìn)行封裝。項(xiàng)目請點(diǎn)擊:# elasticsearch-python
對于上面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)然這個沒寫完,對于聚合還沒寫,而且query也沒全部支持,只是把自己用到的給簡單封裝了下,其實(shí)不知道到底有沒有人用,沒人用自己寫再多也就自己玩玩了。這里我的實(shí)現(xiàn)也很簡單,其實(shí)希望有人能有更好的實(shí)現(xiàn)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41773.html
閱讀 3027·2021-11-23 09:51
閱讀 3821·2021-11-22 15:29
閱讀 3283·2021-10-08 10:05
閱讀 1604·2021-09-22 15:20
閱讀 1029·2019-08-30 15:56
閱讀 1121·2019-08-30 15:54
閱讀 776·2019-08-26 11:54
閱讀 2677·2019-08-26 11:32