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

elasticsearch term & match 查詢

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

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

PUT h1/doc/1
{
  "name": "rose",
  "gender": "female",
  "age": 18,
  "tags": ["白", "漂亮", "高"]
}

PUT h1/doc/2
{
  "name": "lila",
  "gender": "female",
  "age": 18,
  "tags": ["黑", "漂亮", "高"]
}

PUT h1/doc/3
{
  "name": "john",
  "gender": "male",
  "age": 18,
  "tags": ["黑", "帥", "高"]
}

運(yùn)行結(jié)果:

{
  "_index" : "h1",
  "_type" : "doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

2. match 查詢

2.1 match 按條件查詢

# 查詢性別是男性的結(jié)果
GET h1/doc/_search
{
  "query": {
    "match": {
      "gender": "male"
    }
  }
}

查詢結(jié)果:

{
  "took" : 59,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "h1",		# 索引
        "_type" : "doc",		# 文檔類型
        "_id" : "3",			# 文檔唯一 id
        "_score" : 0.2876821,	# 打分機(jī)制打出來的分?jǐn)?shù)
        "_source" : {			# 查詢結(jié)果
          "name" : "john",
          "gender" : "male",
          "age" : 18,
          "tags" : [
            "黑",
            "帥",
            "高"
          ]
        }
      }
    ]
  }
}

2.2 match_all 查詢?nèi)?/h3>
# 查詢 h1 中所有文檔
GET h1/doc/_search
{
  "query": {
    "match_all": {}
  }
}

match_all的值為空,表示沒有查詢條件,那就是查詢?nèi)俊>拖?code>select * from table_name 一樣。

查詢結(jié)果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "h1",
        "_type" : "doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "lila",
          "gender" : "female",
          "age" : 18,
          "tags" : [
            "黑",
            "漂亮",
            "高"
          ]
        }
      },
      {
        "_index" : "h1",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "rose",
          "gender" : "female",
          "age" : 18,
          "tags" : [
            "白",
            "漂亮",
            "高"
          ]
        }
      },
      {
        "_index" : "h1",
        "_type" : "doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "john",
          "gender" : "male",
          "age" : 18,
          "tags" : [
            "黑",
            "帥",
            "高"
          ]
        }
      }
    ]
  }
}

2.3 match_phrase 短語查詢

match 查詢時(shí)散列映射,包含了我們希望搜索的字段和字符串,即只要文檔中有我們希望的那個(gè)關(guān)鍵字,但也會(huì)帶來一些問題。

es 會(huì)將文檔中的內(nèi)容進(jìn)行拆分,對于英文來說可能沒有太大的影響,但是中文短語就不太適用,一旦拆分就會(huì)失去原有的含義,比如以下:

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

PUT t1/doc/1
{
  "title": "中國是世界上人口最多的國家"
}

PUT t1/doc/2
{
  "title": "美國是世界上軍事實(shí)力最強(qiáng)大的國家"
}

PUT t1/doc/3
{
  "title": "北京是中國的首都"
}

2、先使用 match 查詢含有中國的文檔:

GET t1/doc/_search
{
  "query": {
    "match": {
      "title": "中國"
    }
  }
}

查詢結(jié)果:

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 0.68324494,
    "hits" : [
      {
        "_index" : "t1",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.68324494,
        "_source" : {
          "title" : "中國是世界上人口最多的國家"
        }
      },
      {
        "_index" : "t1",
        "_type" : "doc",
        "_id" : "3",
        "_score" : 0.5753642,
        "_source" : {
          "title" : "北京是中國的首都"
        }
      },
      {
        "_index" : "t1",
        "_type" : "doc",
        "_id" : "2",
        "_score" : 0.39556286,
        "_source" : {
          "title" : "美國是世界上軍事實(shí)力最強(qiáng)大的國家"
        }
      }
    ]
  }
}

發(fā)現(xiàn)三篇文檔都被返回,與我們的預(yù)期有偏差;這是因?yàn)?title 中的內(nèi)容被拆分成一個(gè)個(gè)單獨(dú)的字,而 id=2 的文檔包含了 字也符合,所以也被返回了。es 自帶的中文分詞處理不太好用,后面可以使用 ik 中文分詞器來處理。

3、match_phrase 查詢短語

不過可以使用 match_phrase 來匹配短語,將上面的 match 換成 match_phrase 試試:

# 短語查詢
GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": "中國"
    }
  }
}

查詢結(jié)果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.5753642,
    "hits" : [
      {
        "_index" : "t1",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.5753642,
        "_source" : {
          "title" : "中國是世界上人口最多的國家"
        }
      },
      {
        "_index" : "t1",
        "_type" : "doc",
        "_id" : "3",
        "_score" : 0.5753642,
        "_source" : {
          "title" : "北京是中國的首都"
        }
      }
    ]
  }
}

4、slop 間隔查詢

當(dāng)我們要查詢的短語,中間有別的詞時(shí),可以使用 slop 來跳過。比如上述要查詢 中國世界,這個(gè)短語中間被 隔開了,這時(shí)可以使用 slop 來跳過,相當(dāng)于正則中的中國.*?世界

# 短語查詢,查詢中國世界,加 slop 
GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中國世界",
        "slop": 1
      }
    }
  }
}

查詢結(jié)果:

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.7445889,
    "hits" : [
      {
        "_index" : "t1",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.7445889,
        "_source" : {
          "title" : "中國是世界上人口最多的國家"
        }
      }
    ]
  }
}

2.4 match_phrase_prefix 最左前綴查詢

場景:當(dāng)我們要查詢的詞只能想起前幾個(gè)字符時(shí)

# 最左前綴查詢,查詢名字為 rose 的文檔
GET h1/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "name": "ro"
    }
  }
}

查詢結(jié)果:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "h1",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "rose",
          "gender" : "female",
          "age" : 18,
          "tags" : [
            "白",
            "漂亮",
            "高"
          ]
        }
      }
    ]
  }
}

限制結(jié)果集

最左前綴查詢很費(fèi)性能,返回的是一個(gè)很大的集合,一般很少使用,使用的時(shí)候最好對結(jié)果集進(jìn)行限制,max_expansions 參數(shù)可以設(shè)置最大的前綴擴(kuò)展數(shù)量:

# 最左前綴查詢
GET h1/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "gender": {
        "query": "fe",
        "max_expansions": 1
      }
    }
  }
}

查詢結(jié)果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "h1",
        "_type" : "doc",
        "_id" : "2",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "lila",
          "gender" : "female",
          "age" : 18,
          "tags" : [
            "黑",
            "漂亮",
            "高"
          ]
        }
      },
      {
        "_index" : "h1",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "rose",
          "gender" : "female",
          "age" : 18,
          "tags" : [
            "白",
            "漂亮",
            "高"
          ]
        }
      }
    ]
  }
}

2.5 multi_match 多字段查詢

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

# 多字段查詢
PUT t3/doc/1
{
  "title": "maggie is beautiful girl",
  "desc": "beautiful girl you are beautiful so"
}

PUT t3/doc/2
{
  "title": "beautiful beach",
  "desc": "I like basking on the beach,and you? beautiful girl"
}

2、查詢包含 beautiful 字段的文檔:

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "beautiful",				# 要查詢的詞
      "fields": ["desc", "title"]		# 要查詢的字段
    }
  }
}

還可以當(dāng)做 match_phrasematch_phrase_prefix使用,只需要指定type類型即可:

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "gi",
      "fields": ["title"],
      "type": "phrase_prefix"
    }
  }
}

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "girl",
      "fields": ["title"],
      "type": "phrase"
    }
  }
}

3. term 查詢

3.1 初始 es 的分析器

term 查詢用于精確查詢,但是不適用于 text 類型的字段查詢。

在此之前我們先了解 es 的分析機(jī)制,默認(rèn)的標(biāo)準(zhǔn)分析器會(huì)對文檔進(jìn)行:

  • 刪除大多數(shù)的標(biāo)點(diǎn)符號
  • 將文檔拆分為單個(gè)詞條,稱為 token
  • token 轉(zhuǎn)換為小寫

最后保存到倒排序索引上,而倒排序索引用來查詢,如 Beautiful girl 經(jīng)過分析后是這樣的:

POST _analyze
{
  "analyzer": "standard",
  "text": "Beautiful girl"
}


# 結(jié)果,轉(zhuǎn)換為小寫了
{
  "tokens" : [
    {
      "token" : "beautiful",
      "start_offset" : 0,
      "end_offset" : 9,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "girl",
      "start_offset" : 10,
      "end_offset" : 14,
      "type" : "<ALPHANUM>",
      "position" : 1
    }
  ]
}

3.2 term 查詢

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

# 創(chuàng)建索引,自定義 mapping,后面會(huì)講到
PUT t4
{
  "mappings": {
    "doc":{
      "properties":{
        "t1":{
          "type": "text"    # 定義字段類型為 text
        }
      }
    }
  }
}

PUT t4/doc/1
{
  "t1": "Beautiful girl!"
}

PUT t4/doc/2
{
  "t1": "sexy girl!"
}

2、match 查詢:

GET t4/doc/_search
{
  "query": {
    "match": {
      "t1": "Beautiful girl!"
    }
  }
}

經(jīng)過分析后,會(huì)得到 beautiful、girl 兩個(gè) token,然后再去 t4 索引上去查詢,會(huì)返回兩篇文檔:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.5753642,
    "hits" : [
      {
        "_index" : "t4",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.5753642,
        "_source" : {
          "title" : "Beautiful girl"
        }
      },
      {
        "_index" : "t4",
        "_type" : "doc",
        "_id" : "2",
        "_score" : 0.2876821,
        "_source" : {
          "title" : "sex girl"
        }
      }
    ]
  }
}

3、但是我們只想精確查詢包含 Beautiful girl 的文檔,這時(shí)就需要使用 term 來精確查詢:

GET t4/doc/_search
{
  "query": {
    "term": {
      "title": "beautiful"
    }
  }
}

查詢結(jié)果:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "t4",
        "_type" : "doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "title" : "Beautiful girl"
        }
      }
    ]
  }
}

注意:term 查詢不適用于類型是 text 的字段,可以使用 match 查詢;另外 Beautiful 經(jīng)過分析后變?yōu)?beautiful,查詢時(shí)使用 Beautiful 是查詢不到的~

3.3 查詢多個(gè)

精確查詢多個(gè)字段:文章來源地址http://www.zghlxwxcb.cn/news/detail-418513.html

GET t4/doc/_search
{
  "query": {
    "terms": {
      "title": ["beautiful", "sex"]
    }
  }
}

到了這里,關(guān)于elasticsearch term & match 查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請?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)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(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:分詞 對屬性名.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)
  • Elasticsearch(十)搜索---搜索匹配功能①--查詢所有文檔和term級別查詢

    Elasticsearch(十)搜索---搜索匹配功能①--查詢所有文檔和term級別查詢

    之前的學(xué)習(xí)我們已經(jīng)了解了搜索的輔助功能,從這一章開始就是ES真正核心的功能,搜索。針對不同的數(shù)據(jù)類型,ES提供了很多搜索匹配功能:既有進(jìn)行完全匹配的term搜索,也有按照范圍匹配的range搜索;既有進(jìn)行分詞匹配的match搜索,也有按照前綴匹配的suggesr搜索。我們同樣

    2024年02月11日
    瀏覽(26)
  • 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)
  • elasticsearch[二]-DSL查詢語法:全文檢索、精準(zhǔn)查詢(term/range)、地理坐標(biāo)查詢(矩陣、范圍)、復(fù)合查詢(相關(guān)性算法)、布爾查詢

    elasticsearch[二]-DSL查詢語法:全文檢索、精準(zhǔn)查詢(term/range)、地理坐標(biāo)查詢(矩陣、范圍)、復(fù)合查詢(相關(guān)性算法)、布爾查詢

    elasticsearch 的查詢依然是基于 JSON 風(fēng)格的 DSL 來實(shí)現(xiàn)的。 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)來定義查詢。常見的查詢類型包括: 查詢所有 :查詢出所有數(shù)據(jù),一般測試用。例如:match_all 全文檢索(full text)查詢 :利用分詞器對用戶輸入內(nèi)容分詞,然后去

    2024年01月18日
    瀏覽(22)
  • Elasticsearch:了解和使用 match 查詢

    Match query 是針對多個(gè)用例的最常見和最強(qiáng)大的查詢。 它是一個(gè)全文搜索查詢,返回符合指定條件的文檔。 match query 可以即興使用來查詢多個(gè)選項(xiàng)。在我之前的文章 “開始使用 Elasticsearch (2)” 對它有很多的描述。 讓我們首先看看這個(gè)片段顯示的 match query 的格式: 正如你

    2024年02月07日
    瀏覽(18)
  • ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁、高亮)

    ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁、高亮)

    目錄 一、基于 JavaRestClient 查詢文檔 1.1、查詢 API 演示 1.1.1、查詢基本框架 DSL 請求的對應(yīng)格式 響應(yīng)的解析 1.1.2、全文檢索查詢 1.1.3、精確查詢 1.1.4、復(fù)合查詢 1.1.5、排序和分頁 1.1.6、高亮 1.1.1、查詢基本框架 接下里通過一個(gè) match_all 查詢所有,來演示以下基本的 API. 由上可

    2024年02月07日
    瀏覽(24)
  • Elasticsearch:Multi-match (multi_match) 及 Disjunction max 查詢

    多重匹配(multi_match)查詢,顧名思義就是跨多個(gè)字段搜索查詢。 例如,如果我們想在 title、synopsis 和 tags 三個(gè)字段中搜索 Java 一詞,那么 multi_match query 就是答案。另外,很多開發(fā)者還不是很清楚 multi-match 及 disjunction max query 的區(qū)別和聯(lián)系。在今天的文章中,我將詳述這兩個(gè)

    2024年02月05日
    瀏覽(24)
  • ElasticSearch中查詢語句用法(match、match_phrase、multi_match、query_string)

    ElasticSearch中查詢語句用法(match、match_phrase、multi_match、query_string)

    略 1.1 不同字段權(quán)重 ????????如果需要為不同字段設(shè)置不同權(quán)重,可以考慮使用 bool 查詢的 should 子句來組合多個(gè) match 查詢,并為每個(gè) match 查詢設(shè)置不同的權(quán)重。 ????????上面的查詢將在 product_name 字段和 description 字段中搜索包含 \\\"apple\\\" 的文檔,并為 product_name 字段設(shè)

    2024年02月10日
    瀏覽(16)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查詢 match

    官方文檔地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 權(quán)威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 數(shù)據(jù)準(zhǔn)備 官方測試數(shù)據(jù)下載地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,數(shù)據(jù)量很大,我們自己構(gòu)造數(shù)據(jù)吧。 2. m

    2023年04月08日
    瀏覽(33)
  • ElasticSearch系列 - SpringBoot整合ES:多字段查詢 multi_match

    1. 什么是 ElasticSearch 的 multi_match 查詢? 有時(shí)用戶需要在多個(gè)字段中查詢,除了使用布爾查詢封裝多個(gè)match查詢之外,可替代的方案是使用multi_match??梢栽趍ulti_match的query子句中組織數(shù)據(jù)匹配規(guī)則,并在fields子句中指定需要搜索的字段列表。 以下是一個(gè)示例multi-match查詢

    2023年04月21日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包