成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

elasticsearch-python-sdk

seal_de / 1124人閱讀

摘要:前言這里聲明漫談我們都知道下有的包的,我們也知道下有封裝更好的包。當(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

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<