elasticsearch term 查詢之一


  1、前言

    term級別查詢將按照存儲在倒排索引中的確切字詞進行操作,這些查詢通常用於數字,日期和枚舉等結構化數據,而不是全文本字段。 或者,它們允許您制作低級查詢,並在分析過程之前進行。
    term級別的查詢包括以下幾種查詢方式:
    

    1.1、term query

      term是代表完全匹配,也就是精確查詢,搜索前不會再對搜索詞進行分詞,所以我們的搜索詞必須是文檔分詞集合中的一個。比如說我們要查找年齡為39的所有文檔

      

POST /bank/_search?pretty
{
  "query": {
    "term": {
      "age": "39"
    }
  }
}

    結果:

    

 

   另外再查詢address=Avenue的文檔,沒有查到結果

    

 

    為什么?

    字符串字段可以是文本類型(視為全文,如電子郵件正文)或關鍵字(視為精確值,如電子郵件地址或郵政編碼)。精確值(如數字,日期和關鍵字)具有在添加到倒排索引的字段中指定的確切值,以使其可被搜索。

    但是,分析文本字段。這意味着它們的值首先通過一個分析器產生一個項目列表,然后將其添加到倒排索引中。

    分析文本的方法有很多種:默認的標准分析器會刪除大部分的標點符號,將文本分解為單個的單詞,並將其分解為小寫字母。例如,標准分析儀會將字符串“Quick Brown Fox!”變成[quick,brown,fox]。

    先看Avenue的分析

    

    因為171 Putnam Avenue被分解為 171,putnam,avenue三個詞,因此在Avenue時無法查詢到,因為第一個字符是大寫

    下面做一個測試演示

    首先,創建一個索引,指定字段映射,並索引一個文檔

    創建索引和索引數據

    

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "full_text": {
          "type":  "text"        1
        },
        "exact_value": {
          "type":  "keyword"      2
        }
      }
    }
  }
}

PUT my_index/my_type/1
{
  "full_text":   "Quick Foxes!",   3 "exact_value": "Quick Foxes!"    4
}

 

     1、full_text字段是文本類型,將被分析。

        2、exact_value字段是關鍵字類型,不會被分析。

     3、full_text倒排索引將包含術語:[quick,foxes]。

     4、exact_value倒排索引將包含確切的術語:[Quick Foxes!]

    現在,比較術語查詢和匹配查詢的結果:

    

GET my_index/my_type/_search
{
  "query": {
    "term": {
      "exact_value": "Quick Foxes!"   1
    }
  }
}

GET my_index/my_type/_search
{
  "query": {
    "term": {
      "full_text": "Quick Foxes!"    2
    }
  }
}

GET my_index/my_type/_search      3
{
  "query": {
    "term": {
      "full_text": "foxes" 
    }
  }
}

GET my_index/my_type/_search          4
{
  "query": {
    "match": {
      "full_text": "Quick Foxes!" 
    }
  }
}

    1、此查詢匹配,因為exact_value字段包含確切的術語Quick Foxes !.

     2、這個查詢不匹配,因為full_text字段只包含quick和foxes這兩個詞。 它不包含確切的術語Quick Foxes !.

     3、術語foxes的查詢匹配full_text字段。

     4、full_text字段上的匹配查詢首先分析查詢字符串,然后查找包含快速或狐狸或兩者的文檔。

 

    再看看分析

GET /my_index/_analyze
{
  "field": "exact_value",
  "text": "Quick Foxes!" 
}

結果:
{
  "tokens": [
    {
      "token": "Quick Foxes!",
      "start_offset": 0,
      "end_offset": 12,
      "type": "word",
      "position": 0
    }
  ]
}
GET /my_index/_analyze
{
  "field": "full_text",
  "text": "Quick Foxes!" 
}
結果:

{
  "tokens": [
    {
      "token": "quick",
      "start_offset": 0,
      "end_offset": 5,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "foxes",
      "start_offset": 6,
      "end_offset": 11,
      "type": "<ALPHANUM>",
      "position": 1
    }
  ]
}

 

    

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM