最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python連接es之查詢方式示例匯總

 更新時(shí)間:2023年05月28日 14:31:27   作者:Hunter  
這篇文章主要為大家介紹了Python連接es之查詢方式示例匯總詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

上一節(jié)除了介紹使用 Python 連接 es,還有最簡(jiǎn)單的 query() 方法,這一節(jié)介紹一下幾種其他的查詢方式。

1、query() 方法介紹

在上一節(jié)中介紹了 query() 的一個(gè)簡(jiǎn)單示例,如下:

s = Search(using="default").index("exam")
s = s.query("match", name="張三豐")

query() 中接受兩個(gè)參數(shù),第一個(gè)是字段查詢的方式,比如這里是 match,也可以是 term,這個(gè)依照查詢的目的來替換。

第二個(gè)則是查詢的字段與值,比如這里是查詢的 name 字段為 "張三豐" 的數(shù)據(jù)。

如果是有多個(gè)條件,比如 name="張三豐",address="中國(guó)" 的數(shù)據(jù),這里的 = ,并非是完全等于的意思,而是會(huì)依照前面的查詢方式,比如 match 或 term 進(jìn)行類似的分詞或者模糊搜索。

如果是上面多個(gè)條件的查詢,可以直接在后面加上類似的 query():

s = s.query("match", name="張三豐").query("match", address="中國(guó)")

這兩個(gè) query() 通過鏈?zhǔn)讲僮鬟B在一起轉(zhuǎn)換成 es 語句就是使用 must 將多條件連接在一起,我們可以使用 to_dict() 方式來查看:

s.to_dict()
# {'query': {'bool': {'must': [{'match': {'name': '張三豐'}}, {'match': {'address': '中國(guó)'}}]}}}

2、Q() 查詢

如果看過之前我寫過的 Django 系列筆記,應(yīng)該記得在 Django 里也有個(gè) Q() 方法的查詢,和這里的一樣,也是用于條件的聯(lián)合,與或非條件都可以實(shí)現(xiàn)。

引入方式如下:

from elasticsearch_dsl import Q

但是如果是在 Django 中使用 es 的連接,也是同樣使用 Q() 方法,我們可以使用 as 來區(qū)分,這里我們對(duì)于 es 的 Q() 方法可以使用 ES_Q() 來區(qū)分:

from elasticsearch_dsl import Q as ES_Q

單個(gè)條件的使用 Q() 如下:

s = s.query(ES_Q("match", name="張三豐"))

如下使用 dict 形式的操作也是等效的:

s = s.query(ES_Q({"match": {"name": "張三豐"}}))

與操作

對(duì)于這兩個(gè)條件,如果想要實(shí)現(xiàn)它們的與操作:

q1 = ES_Q("match", name="張三豐")
q2 = ES_Q("match", address="中國(guó)")

可以如下實(shí)現(xiàn):

s = s.query(q1 & q2)

或操作

如果是想實(shí)現(xiàn)上面的或操作,可以如下:

s = s.query(q1 | q2)

非操作

如果是想取反,直接在條件前加一個(gè) ~ 即可:

q1 = ~ES_Q("match", name="張三豐")
s = s.query(q1)

multi_match

如果是搜索多字段,可以如下操作:

q = ES_Q("multi_match", query="中國(guó) 張三豐", fields=["name", "address"])
s = s.query(q)

text.keyword 操作

對(duì)于 es 中 text 字段,前面我們介紹過 .keyword 的查詢方式,是將 text 字段作為一個(gè)整體進(jìn)行查詢,在 ES_Q() 中,以下兩種操作是等效的:

q = ES_Q({"term": {"address.keyword": "中國(guó)湖北省"}})
q = ES_Q("term", address__keyword="中國(guó)湖北省")

filter() 操作

在 es 中的 filter 操作,在 Python 中是一個(gè) filter() 函數(shù),可以直接使用:

q = ES_Q("term", name="張三豐")
s = s.filter(q)

range 操作

實(shí)現(xiàn)大小于的操作示例如下:

q = ES_Q({"range": {"age": {"gte": 21}}})
s = s.query(q)

exclude() 操作

如果是想取反,除了使用 ~Q(),還可以直接使用 exclude() 函數(shù),這個(gè)和 Django 里的操作也是一樣的:

q = ES_Q("term", name="張三豐")
s = s.exclude(q)

3、排序

如果是想對(duì)返回的結(jié)果進(jìn)行排序操作,直接使用 .sort() 方法。

比如想對(duì) age 字段排序,正序返回?cái)?shù)據(jù),可如下操作:

s = s.sort("age")

如果是想倒序返回,可以如下操作:

s = s.sort("-age")

多字段排序直接在后面跟上就行:

s = s.sort("-age", "name")

4、分頁(yè)

Python 連接 es 進(jìn)行分頁(yè),可以直接使用 Python 里的切片操作,比如:

s = s[5:10]

5、source() 指定返回字段

我們可以通過 source() 方法指定返回的字段:

s = s.source(["name", "address"])

source() 方法還可以接受 includes 和 excludes 參數(shù)來指定返回的字段或者不返回的字段,這個(gè)和 es 的原生處理方式是一致的:

s = s.source(
    includes=["address"],
    excludes=["name"]
)

6、extra() 操作

extra() 函數(shù)接受一些查詢的額外屬性,比如 size 參數(shù)決定返回條數(shù),比如 from 參數(shù)可以決定從第幾條數(shù)據(jù)開始返回,sort 參數(shù)決定排序方式,以及 _source 參數(shù)決定返回的字段。

比如我們想要返回的數(shù)據(jù)從第 2 條數(shù)據(jù)開始,返回兩條,按照 name 字段進(jìn)行排序,只返回 name 和 _id 字段,可以如下操作:

s = Search(using="default").index("exam")
s = s.extra(
    sort="name",
    _source=["name"],
    **{
        "from": 1,
        "size": 2
    }
)
response = s.execute()

7、count() 總數(shù)

前面介紹過獲取符合條件的總數(shù),可以通過 response.hits.total.value 的方式獲得,其實(shí)對(duì)于 Search(),可以直接使用 count() 函數(shù):

count = s.count()

8、from_dict() 函數(shù)

如果我們想直接運(yùn)行 kibana 里執(zhí)行的命令,可以使用 from_dict() 函數(shù),比如:

s = s.from_dict(
  {
    "query": {
      "term": {
        "name": {
          "value": "張三豐"
        }
      }
    }
  }
)

以上就是Python連接es之查詢方式示例匯總的詳細(xì)內(nèi)容,更多關(guān)于Python連接es查詢方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python低層多線程接口_thread模塊的用法和特性

    Python低層多線程接口_thread模塊的用法和特性

    這篇文章主要介紹了Python低層多線程接口_thread模塊的用法和特性,_thread是python標(biāo)準(zhǔn)庫(kù)中的一個(gè)低層多線程API,可以在進(jìn)程中啟動(dòng)線程來處理任務(wù),并且提供了簡(jiǎn)單的鎖機(jī)制來控制共享資源的同步訪問,本文就_thread模塊的用法和特性做個(gè)簡(jiǎn)單的演示,需要的朋友可以參考下
    2024-10-10
  • 詳解python中的IO操作方法

    詳解python中的IO操作方法

    這篇文章主要介紹了Python實(shí)現(xiàn)IO操作的示例,是python入門必會(huì)得知識(shí)點(diǎn),將幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2022-01-01
  • Python采用Django開發(fā)自己的博客系統(tǒng)

    Python采用Django開發(fā)自己的博客系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python采用Django開發(fā)自己的博客系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 利用python查看官方文檔

    利用python查看官方文檔

    這篇文章主要介紹了利用python查看官方文檔,我們?cè)趯W(xué)習(xí)和工作中,總是會(huì)遇到一些問題,或許官方文檔能解決這一問題,下面我們就來看看python如何查看官方文檔吧
    2022-01-01
  • 基于Python實(shí)現(xiàn)射擊小游戲的制作

    基于Python實(shí)現(xiàn)射擊小游戲的制作

    這篇文章主要介紹了如何利用Python制作一個(gè)自己專屬的第一人稱射擊小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試
    2022-04-04
  • 對(duì)Python 簡(jiǎn)單串口收發(fā)GUI界面的實(shí)例詳解

    對(duì)Python 簡(jiǎn)單串口收發(fā)GUI界面的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)Python 簡(jiǎn)單串口收發(fā)GUI界面的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 基于python中theano庫(kù)的線性回歸

    基于python中theano庫(kù)的線性回歸

    這篇文章主要為大家詳細(xì)介紹了基于python中theano庫(kù)的線性回歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python下的常用下載安裝工具pip的安裝方法

    Python下的常用下載安裝工具pip的安裝方法

    這篇文章主要介紹了Python下的常用下載安裝工具pip的安裝方法,注意在Python2.7.9和3.4以上默認(rèn)已經(jīng)集成了pip,需要的朋友可以參考下
    2015-11-11
  • python光學(xué)仿真實(shí)現(xiàn)光線追跡折射與反射的實(shí)現(xiàn)

    python光學(xué)仿真實(shí)現(xiàn)光線追跡折射與反射的實(shí)現(xiàn)

    這篇文章主要為大家介紹了python光學(xué)仿真實(shí)現(xiàn)光線追跡折射與反射的實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • python matplotlib實(shí)現(xiàn)坐標(biāo)投影的示例代碼

    python matplotlib實(shí)現(xiàn)坐標(biāo)投影的示例代碼

    這篇文章主要為大家詳細(xì)介紹了python matplotlib實(shí)現(xiàn)坐標(biāo)投影,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02

最新評(píng)論

大竹县| 金山区| 独山县| 太仓市| 六枝特区| 大安市| 绩溪县| 抚顺市| 岳西县| 宜城市| 阿坝县| 华容县| 赫章县| 任丘市| 鄂托克前旗| 滦南县| 临江市| 威宁| 庆安县| 淅川县| 桓台县| 唐河县| 宜兰县| 清水县| 黄陵县| 汉源县| 浑源县| 九龙城区| 手机| 泊头市| 微山县| 顺平县| 剑河县| 大冶市| 孝义市| 成武县| 凉城县| 灵璧县| 澄城县| 财经| 益阳市|