国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

elasticsearch-python-sdk

seal_de / 1078人閱讀

摘要:前言這里聲明漫談我們都知道下有的包的,我們也知道下有封裝更好的包。當然這種也是優點,但是如果用了下的的的話,你會會發現對于都封裝的很好。故此,我對下的包進行了增強對進行封裝。這里我的實現也很簡單,其實希望有人能有更好的實現。

前言

這里聲明: elasticsearch -> es

漫談

我們都知道Python 下 有es的sdk包的,我們也知道java 下有封裝更好的es包。為什么說python 下的就封裝不好呢? 其實這個也兩說,有人就喜歡這樣呢

Python下的es包首先什么都能做,實現功能完全沒問題。但是對于 DSL 的話,Python下的es就沒有封裝了,完全按照es的語法寫查詢語句。當然這種也是優點,但是如果用了Java下的es 的sdk的話,你會會發現對于DSL 都封裝的很好。

至于封不封裝DSL,其實也看業務復不復雜,簡單的業務,幾行的DSL 直接寫也沒什么,但是如果很長的呢,比如我這樣業務的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 直接寫在代碼中,這個也太長了吧,而且這還不是全部,只是一部分,對于這種動態而且復雜的DSL,直接寫,會顯得太長。

故此,我對Python 下的es包進行了增強 —— 對DSL進行封裝。項目請點擊:# elasticsearch-python

對于上面DSL 的封裝調用結果是這樣的:

    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))

這下清爽了很多是吧!

當然這個沒寫完,對于聚合還沒寫,而且query也沒全部支持,只是把自己用到的給簡單封裝了下,其實不知道到底有沒有人用,沒人用自己寫再多也就自己玩玩了。這里我的實現也很簡單,其實希望有人能有更好的實現。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41773.html

相關文章

發表評論

0條評論

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