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

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

這篇具有很好參考價(jià)值的文章主要介紹了使用ES Term query查詢時(shí)一定要注意的地方。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、Term query簡介

使用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ì)Term query做了3項(xiàng)明確說明。

  • 避免是對(duì)text屬性的字段使用Term query查詢。
  • Elasticsearch會(huì)因?yàn)榉衷~器的原因改變字段的值,所以如果想要精確匹配text類型的字段將會(huì)很難。
  • 如果查詢text類型的字段,建議使用Match query。
    使用ES Term query查詢時(shí)一定要注意的地方

二、Term query和Match query對(duì)比

1. 數(shù)據(jù)準(zhǔn)備

建立一個(gè)索引,其中namekeyword類型,full_nametext類型。

PUT /test-index
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "keyword"
        },
        "full_name": {
          "type": "text"
        }
      }
    }
  }
}

插入一條數(shù)據(jù)

PUT /test-index/_doc/1
{
  "name":"zhang",
  "full_name":"zhang san"
}

2. 使用Match query查詢

查詢name字段

GET /test-index/_search
{
  "query": {
    "match": {
      "name": "zhang"
    }
  }
}

可以查詢到結(jié)果
使用ES Term query查詢時(shí)一定要注意的地方
查詢full_name字段

GET /test-index/_search
{
  "query": {
    "match": {
      "full_name": "zhang san"
    }
  }
}

同樣也可以查詢到結(jié)果
使用ES Term query查詢時(shí)一定要注意的地方

3. 使用Term query查詢

查詢name字段

GET /test-index/_search
{
  "query": {
    "term": {
      "name": "zhang"
    }
  }
}

可以查詢到結(jié)果

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

查詢full_name字段

GET /test-index/_search
{
  "query": {
    "term": {
      "full_name": "zhang san"
    }
  }
}

沒有查到結(jié)果
使用ES Term query查詢時(shí)一定要注意的地方

但是如果你按空格拆開來查詢,比如只查詢zhang或者san,是可以查詢到結(jié)果的(Match query拆分后也可以查詢到結(jié)果

GET /test-index/_search
{
  "query": {
    "term": {
      "full_name": "zhang"
    }
  }
}

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

好了,到此就解釋了為什么官網(wǎng)要做那三項(xiàng)說明,簡單來說就是當(dāng)使用Term query查詢時(shí),如果是text類型,會(huì)按照分詞后的結(jié)果來進(jìn)行匹配,而分詞的規(guī)則,如果你掌握不好,那么查詢時(shí)就很容易出錯(cuò)了。

我們也可以驗(yàn)證一下在standard分詞器下,zhang san的分詞結(jié)果。

POST _analyze
{
  "analyzer": "standard",
  "text": "zhang san"
}

可以看到,zhang san確實(shí)被拆分為了zhangsan兩部分。
使用ES Term query查詢時(shí)一定要注意的地方
所以使用Term query查詢時(shí),如果直接查詢zhang san是查詢不到結(jié)果的。

三、分詞器修改字段值的場景

我們知道Elasticsearch的有多種分詞器,你也可以自定義分詞器,所以實(shí)際上在不同的分詞器下,zhang san可能有不同的拆分方法,就像前面說的,分詞的規(guī)則如果你掌握不好,就會(huì)導(dǎo)致查詢的結(jié)果和你設(shè)想中的結(jié)果不匹配,下面,我們可以來看看默認(rèn)的分詞器standard analyzer,會(huì)有哪些改變字段值的場景?

1. 刪除大多數(shù)標(biāo)點(diǎn)符號(hào)

POST _analyze
{
  "analyzer": "standard",
  "text": "hello! zhang san"
}

使用ES Term query查詢時(shí)一定要注意的地方
可以對(duì)比下如果是whitespace分詞器則可以識(shí)別出標(biāo)點(diǎn)符號(hào)

POST _analyze
{
  "analyzer": "whitespace",
  "text": "hello! zhang san"
}

可以看到hello!并沒有被拆分開。
使用ES Term query查詢時(shí)一定要注意的地方

2. 英文大寫轉(zhuǎn)小寫

這是一個(gè)很容易掉坑的地方。

POST _analyze
{
  "analyzer": "standard",
  "text": "Hello Zhang San"
}

經(jīng)過standard分詞器后,大寫的英文字母都被轉(zhuǎn)換成了小寫,所以,此時(shí)如果你還是按照Hello來查詢的話,是不會(huì)查詢到結(jié)果的,這點(diǎn)要特別注意。
使用ES Term query查詢時(shí)一定要注意的地方

3. 超過max_token_length部分單獨(dú)拆分

max_token_length:最大令牌長度。如果超過此長度,則會(huì)被拆分開。默認(rèn)值為 :255

自定義一個(gè)分詞器,并設(shè)置max_token_length長度為5。

PUT test-analyzer
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "standard",
          "max_token_length": 5
        }
      }
    }
  }
}

看一下分詞效果

POST test-analyzer/_analyze
{
  "analyzer": "my_analyzer",
  "text": "Hello, Elasticsearch"
}

可以看到,拆分后的每一項(xiàng)長度最多不會(huì)超過5。
使用ES Term query查詢時(shí)一定要注意的地方文章來源地址http://www.zghlxwxcb.cn/news/detail-501313.html

到了這里,關(guān)于使用ES Term query查詢時(shí)一定要注意的地方的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • 【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)
  • es筆記三之term,match,match_phrase 等查詢方法介紹

    es筆記三之term,match,match_phrase 等查詢方法介紹

    本文首發(fā)于公眾號(hào):Hunter后端 原文鏈接:es筆記三之term,match,match_phrase 等查詢方法介紹 首先介紹一下在 es 里有兩種存儲(chǔ)字符串的字段類型,一個(gè)是 keyword,一個(gè)是 text。 keyword 在存儲(chǔ)數(shù)據(jù)的時(shí)候是作為一個(gè)整體存儲(chǔ)的,不會(huì)對(duì)其進(jìn)行分詞處理 text 存儲(chǔ)數(shù)據(jù)的時(shí)候會(huì)對(duì)字符串

    2024年02月05日
    瀏覽(23)
  • ES組合查詢-Boolean Query

    ES組合查詢-Boolean Query

    BooleanQuery可以將多個(gè)查詢語句組合在一起。下面是一個(gè)基礎(chǔ)的模板: 上面是從官網(wǎng)搬過來的官網(wǎng)地址 must 中的語句是必須滿足的,會(huì)影響最終文檔的得分 filter 中的語句是必須滿足的,但是不會(huì)影響最終的得分 must_not 中的語句是必須不滿足的, 不影響最終的得分 should 中的語

    2023年04月20日
    瀏覽(16)
  • Elasticsearch ES 簡單查詢 Query String Search 入門

    嘗試了text類型排序需要特別處理下. \\\"reason\\\" : \\\"Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index.

    2024年02月16日
    瀏覽(27)
  • 【ES專題】ElasticSearch 高級(jí)查詢語法Query DSL實(shí)戰(zhàn)

    【ES專題】ElasticSearch 高級(jí)查詢語法Query DSL實(shí)戰(zhàn)

    個(gè)人在學(xué)習(xí)的過程中,感覺比較吃力的地方有如下: 語法結(jié)構(gòu)比較陌生 沒有中文文檔, 只能看英文 其他博客也比較少介紹語法結(jié)構(gòu)。比如說,為什么查詢中會(huì)出現(xiàn) query 有ES入門基礎(chǔ),且想進(jìn)一步學(xué)習(xí)ES基本操作的朋友 系列上一篇文章:《【ES專題】ElasticSearch快速入

    2024年02月06日
    瀏覽(25)
  • 【ElasticSearch-基礎(chǔ)篇】ES高級(jí)查詢Query DSL全文檢索

    和術(shù)語級(jí)別查詢(Term-Level Queries)不同,全文檢索查詢(Full Text Queries)旨在 基于相關(guān)性搜索和匹配文本數(shù)據(jù) 。這些查詢會(huì)對(duì)輸入的文本進(jìn)行分析,將其 拆分 為詞項(xiàng)(單個(gè)單詞),并執(zhí)行諸如分詞、詞干處理和標(biāo)準(zhǔn)化等操作。 全文檢索的關(guān)鍵特點(diǎn): 對(duì)輸入的文本進(jìn)行分析

    2024年01月22日
    瀏覽(11)
  • ElasticSearch系列 - SpringBoot整合ES:查詢條件 query 和過濾條件 filter 的區(qū)別

    01. Elasticsearch 查詢條件和過濾條件的區(qū)別? Elasticsearch中的查詢條件和過濾條件都是用于搜索和過濾文檔的條件,但它們之間有一些區(qū)別。 查詢條件是用于計(jì)算文檔相關(guān)度得分的條件,它會(huì)將所有符合條件的文檔按照相關(guān)度得分從高到低排序,并返回前N個(gè)文檔。查詢條件可以

    2024年02月14日
    瀏覽(26)
  • Elasticsearch(es)中must以及term的基本使用

    在 Elasticsearch(ES)中,should 和 must 是布爾查詢(Boolean Query)中常用的兩個(gè)子句。 should 子句:should 表示一個(gè)或多個(gè)條件之一滿足即可匹配文檔。它類似于邏輯上的 OR 操作,用于構(gòu)建可選項(xiàng)或者提升匹配文檔的相關(guān)性評(píng)分。當(dāng)至少一個(gè) should 子句匹配時(shí),文檔將被認(rèn)為是匹配

    2024年01月22日
    瀏覽(65)
  • es通過rest接口_search、_delete_by_query查詢與刪除數(shù)據(jù)

    es通過rest接口_search、_delete_by_query查詢與刪除數(shù)據(jù)

    1、rest接口查詢數(shù)據(jù) rest查詢: http://localhost:9200/index_name/_search 查詢表達(dá)式: postman請(qǐng)求截圖: 2、使用Rest接口刪除數(shù)據(jù) rest刪除數(shù)據(jù): http://localhost:9200/index_name/_delete_by_query 查詢表達(dá)式: postman請(qǐng)求截圖:

    2024年02月16日
    瀏覽(26)
  • 【ES筆記02】ElasticSearch數(shù)據(jù)庫之查詢操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

    【ES筆記02】ElasticSearch數(shù)據(jù)庫之查詢操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

    這篇文章,主要介紹ElasticSearch數(shù)據(jù)庫之查詢操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)。 目錄 一、布爾查詢 1.1、主鍵查詢 1.2、兩種查詢方式 (1)路徑參數(shù)查詢 (2)請(qǐng)求體參數(shù)查詢 1.3、match查詢 (1)match (2)match_all 1.4、過濾字段 1.5、布

    2023年04月09日
    瀏覽(88)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包