国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

es筆記五之term-level的查詢操作

這篇具有很好參考價(jià)值的文章主要介紹了es筆記五之term-level的查詢操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文首發(fā)于公眾號(hào):Hunter后端
原文鏈接:es筆記五之term-level的查詢操作

官方文檔上寫的是 term-level queries,表義為基于準(zhǔn)確值的對(duì)文檔的查詢,可以理解為對(duì) keyword 類型或者 text 類型分詞為 keyword 的字段進(jìn)行 term 形式的精確查找。

以下是本篇筆記目錄:

  1. 是否存在值
  2. 前綴搜索
  3. 大小于操作
  4. term 查詢
  5. terms 查詢
  6. wildcard 查詢

1、是否存在值

exists 查詢某個(gè)字段是否存在值。

還是使用上篇筆記講的 exam 這個(gè) index,我們創(chuàng)建一條數(shù)據(jù),只給定 name 的值,那么 address 的值就 null,或者說查詢返回的數(shù)據(jù)就沒有這個(gè)字段了。

PUT /exam/_doc/12
{
    "name" : "test"
}

然后我們查詢 address 字段有值的數(shù)據(jù):

GET /exam/_search
{
  "query": {
    "exists": {
      "field": "address"
    }
  }
}

就可以發(fā)現(xiàn)返回的數(shù)據(jù)中沒有我們創(chuàng)建的這條數(shù)據(jù),或者我們?nèi)》床僮?,查?address 字段沒有值的數(shù)據(jù):

GET /exam/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"exists": {"field": "address"}}
      ]
    }
  }
}

2、前綴搜索

對(duì)于我們?cè)谇懊鎰?chuàng)建的這條數(shù)據(jù):

PUT /exam/_doc/16
{
    "name" : "張三豐",
    "address": "一個(gè)蘋果"
}

如果是 name 字段,因?yàn)樗且粋€(gè) keyword 類型,所以它是一個(gè)整體不會(huì)被分詞處理,我們可以搜索 name 的值為 '張', '張三' 和 '張三豐' 都可以搜索到。

GET /exam/_search
{
  "query": {
    "prefix": {
      "name": {
        "value": "張"
      }
    }
  }
}

但是對(duì)于 address 字段,發(fā)現(xiàn)是可以搜索到 '一','一個(gè)' 和 '蘋果',但是搜索 '一個(gè)蘋',或者 '一個(gè)蘋果' 是搜不到結(jié)果的。

GET /exam/_search
{
  "query": {
    "prefix": {
      "address": {
        "value": "一個(gè)蘋"
      }
    }
  }
}

我們可以看一下 '一個(gè)蘋果' 的分詞結(jié)果:

GET /exam/_doc/16/_termvectors?fields=address

可以發(fā)現(xiàn)可以搜索到的詞都在以分詞結(jié)果的開頭或者全部,但是 '一個(gè)蘋' 是沒有分詞結(jié)果以此為開頭的。

所以這里我們的搜索操作是基于 address 字段的分詞結(jié)果列表來查詢的。

如果想要搜索到從 '一' 開始到結(jié)尾之間任意地點(diǎn)截?cái)嗟臄?shù)據(jù),我們就需要將 address 字段作為一個(gè)整體來搜索,那就是加上 .keyword 來操作。

GET /exam/_search
{
  "query": {
    "prefix": {
      "address.keyword": {
        "value": "一個(gè)蘋"
      }
    }
  }
}

3、大小于操作

前面介紹了 gt, gte, lt, lte 的操作是在 bool 下的 filter 里操作,這里我們可以直接放到 query 下:

GET /bank/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

4、term 查詢

前面介紹過 term 查詢是一種精確查詢,但是官方文檔提醒我們應(yīng)該盡量避免對(duì) text 字段使用 term 查詢,因?yàn)?text 類型的數(shù)據(jù)在寫入的時(shí)候會(huì)被分詞,通過 term 查詢我們可能搜索不到想要的查詢的數(shù)據(jù)。同時(shí)建議我們查詢 text 字段應(yīng)當(dāng)使用 match 操作。

我們使用官方文檔提供的一個(gè)示例來說明為什么應(yīng)該盡量避免使用 term 查詢來查詢 text 字段,其實(shí)前面我們介紹過相關(guān)的示例,這里單獨(dú)拿出來做一下說明。

還是使用我們前面用過的索引 exam,我們來寫入一條數(shù)據(jù):

PUT /exam/_doc/18
{
  "address": "quick brown foxes"
}

然后我們想要搜索 'quick brown foxes' 這個(gè)字符串,使用下面的操作:

GET /exam/_search
{
  "query": {
    "term": {
      "address": {
        "value": "quick brown foxes"
      }
    }
  }
}

這個(gè)肯定是搜索不到的,因?yàn)檫@個(gè)字符串在寫入的時(shí)候已經(jīng)被分詞處理了,而 term 是一個(gè)精確查找,相當(dāng)于搜索一整個(gè)字符串,這就肯定搜索不到了。

但是我們可以使用 match,match 操作會(huì)在搜索前先對(duì)搜索的字符串進(jìn)行分詞處理,然后進(jìn)行匹配操作,所以使用下面的操作是可以搜索到數(shù)據(jù)的:

GET /exam/_search
{
  "query": {
    "match": {
      "address": "quick brown foxes"
    }
  }
}

前面還介紹過,如果想要搜索一整個(gè) address 的值為我們搜索的字符串內(nèi)容,可以使用 address.keyword:

GET /exam/_search
{
  "query": {
    "term": {
      "address.keyword": "quick brown foxes"
    }
  }
}

5、terms 查詢

如果想要同時(shí)搜索多個(gè)精確字段值,比如搜索 "quick" 和 "蘋果",就可以使用 terms:

GET /exam/_search
{
  "query": {
    "terms": {
      "address": ["quick", "蘋果"]
    }
  }
}

6、wildcard 查詢

wildcard 是通配符的意思,這里的用法有點(diǎn)類似于前綴的操作,都是通過符號(hào)來實(shí)現(xiàn)更為隨意的匹配。

這里有兩個(gè)通配符,一個(gè)是 *,一個(gè)是 ?

* 的作用是 0 到 n 個(gè)字符長(zhǎng)度

比如我搜索 qui* 就可以查到 quick 的數(shù)據(jù):

GET /exam/_search
{
  "query": {
    "wildcard": {
      "address": {
        "value": "qui*"
      }
    }
  }
}

? 的作用是匹配任意單個(gè)字符,比如我們搜索 qui?k,也可以查詢到這條數(shù)據(jù):

GET /exam/_search
{
  "query": {
    "wildcard": {
      "address": {
        "value": "qui?k"
      }
    }
  }
}

如果想獲取更多后端相關(guān)文章,可掃碼關(guān)注閱讀:
es筆記五之term-level的查詢操作文章來源地址http://www.zghlxwxcb.cn/news/detail-456596.html

到了這里,關(guān)于es筆記五之term-level的查詢操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch系列 - SpringBoot整合ES:多個(gè)精確值查詢 terms

    ElasticSearch - SpringBoot整合ES:多個(gè)精確值查詢 terms 01. ElasticSearch terms 查詢支持的數(shù)據(jù)類型 在Elasticsearch中,terms查詢支持多種數(shù)據(jù)類型,包括: 字符串類型:可以將多個(gè)字符串值作為數(shù)組傳遞給terms查詢,以匹配包含任何一個(gè)指定字符串值的文檔。 數(shù)值類型:可以將多個(gè)數(shù)值作

    2024年02月16日
    瀏覽(28)
  • 使用ES Term query查詢時(shí)一定要注意的地方

    使用ES Term query查詢時(shí)一定要注意的地方

    使用 Term query 可以根據(jù)精確值查找相關(guān)文檔數(shù)據(jù),不過 Term query 查詢與 Match query 查詢還是有區(qū)別的,有時(shí)候你會(huì)發(fā)現(xiàn)用 Match query 可以查到,換成 Term query 卻不行,本文整理一些使用 Term query 容易出錯(cuò)的點(diǎn)供參考。 如果你查看 Term query 的官方文檔,你就會(huì)發(fā)現(xiàn),官網(wǎng)首先對(duì)

    2024年02月11日
    瀏覽(17)
  • 【ES】es查詢term、match、match_phrase、mast_not、mast...

    keyword:不分詞 非keyword:分詞 對(duì)屬性名.keyword,就是全值匹配。如果查詢的屬性是text,就會(huì)匹配分詞。 term:查詢的入?yún)?,不?huì)分詞。 terms:查詢的入?yún)?,不?huì)分詞。 match:分詞匹配 match_phrase:短語匹配,一個(gè)slop屬性,可以使短語中的詞,調(diào)換順序 match_phrase_prefix:分詞前綴

    2024年02月22日
    瀏覽(19)
  • 【SpringBoot筆記28】SpringBoot集成ES數(shù)據(jù)庫之操作doc文檔(創(chuàng)建、更新、刪除、查詢)

    這篇文章,主要介紹SpringBoot集成ES數(shù)據(jù)庫之操作doc文檔(創(chuàng)建、更新、刪除、查詢)。 目錄 一、SpringBoot操作ES文檔數(shù)據(jù) 1.1、創(chuàng)建文檔 1.2、更新文檔 1.3、刪除文檔

    2024年02月08日
    瀏覽(35)
  • Elasticsearch 中的 term、terms 和 match 查詢

    目錄 term 查詢 terms 查詢 match 查詢 注意事項(xiàng) 結(jié)論 ? ?Elasticsearch 提供了多種查詢類型,用于不同的搜索需求。 term 、 terms 和 match 是其中最常用的一些查詢類型。下面分別介紹每種查詢類型的用法和特點(diǎn)。 ? term 查詢用于精確值匹配。它通常用于(keyword)類型的字段,

    2024年04月14日
    瀏覽(40)
  • celery筆記五之消息隊(duì)列的介紹

    celery筆記五之消息隊(duì)列的介紹

    本文首發(fā)于公眾號(hào):Hunter后端 原文鏈接:celery筆記五之消息隊(duì)列的介紹 前面我們介紹過 task 的處理方式,將 task 發(fā)送到隊(duì)列 queue,然后 worker 從 queue 中一個(gè)個(gè)的獲取 task 進(jìn)行處理。 task 的隊(duì)列 queue 可以是多個(gè),處理 task 的 worker 也可以是多個(gè),worker 可以處理任意 queue 的 t

    2024年02月09日
    瀏覽(19)
  • Django筆記三十五之a(chǎn)dmin后臺(tái)界面介紹

    Django筆記三十五之a(chǎn)dmin后臺(tái)界面介紹

    本文首發(fā)于公眾號(hào):Hunter后端 原文鏈接:Django筆記三十五之a(chǎn)dmin后臺(tái)界面介紹 這一篇介紹一下 Django 的后臺(tái)界面使用。 Django 自帶了一套后臺(tái)管理界面,可用于我們直接操作數(shù)據(jù)庫數(shù)據(jù),本篇筆記目錄如下: 創(chuàng)建后臺(tái)賬號(hào)以及登錄操作 注冊(cè)后臺(tái)顯示的數(shù)據(jù)表 列表字段的顯示

    2024年02月02日
    瀏覽(23)
  • elasticsearch term & match 查詢

    運(yùn)行結(jié)果: 查詢結(jié)果: match_all 的值為空,表示沒有查詢條件,那就是查詢?nèi)?。就?select * from table_name 一樣。 查詢結(jié)果: match 查詢時(shí)散列映射,包含了我們希望搜索的字段和字符串,即只要文檔中有我們希望的那個(gè),但也會(huì)帶來一些問題。 es 會(huì)將文檔中的內(nèi)容進(jìn)

    2023年04月19日
    瀏覽(24)
  • ElasticSearch中結(jié)構(gòu)化查詢(term、terms、range、exists、match、bool)

    ElasticSearch中結(jié)構(gòu)化查詢(term、terms、range、exists、match、bool)

    ????????term 主要用于精確匹配哪些值,比如數(shù)字,日期,布爾值或 not_analyzed 的字符串(未經(jīng)分析的文本數(shù)據(jù)類型): 當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù): ????????terms 跟 term 相似,但 terms 允許指定多個(gè)匹配條件。 如果某個(gè)字段指定了多個(gè)值,那么文檔需要一起去做匹配: ?????

    2024年02月05日
    瀏覽(27)
  • Django筆記二十五之?dāng)?shù)據(jù)庫函數(shù)之日期函數(shù)

    Django筆記二十五之?dāng)?shù)據(jù)庫函數(shù)之日期函數(shù)

    本文首發(fā)于公眾號(hào):Hunter后端 原文鏈接:Django筆記二十五之?dāng)?shù)據(jù)庫函數(shù)之日期函數(shù) 日期函數(shù)主要介紹兩個(gè)大類,Extract() 和 Trunc() Extract() 函數(shù)作用是提取日期,比如我們可以提取一個(gè)日期字段的年份,月份,日等數(shù)據(jù) Trunc() 的作用則是截取,比如 2022-06-18 12:12:12 ,我們可以根

    2023年04月19日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包