elasticsearch term 查询之一

  一、前言

    term级别查询将按照存储在倒排索引中的确切字词进行操做,这些查询一般用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,它们容许您制做低级查询,并在分析过程以前进行。
    term级别的查询包括如下几种查询方式:
    

    1.一、term query

      term是表明彻底匹配,也就是精确查询,搜索前不会再对搜索词进行分词,因此咱们的搜索词必须是文档分词集合中的一个。好比说咱们要查找年龄为39的全部文档html

      

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

    结果:app

    

 

   另外再查询address=Avenue的文档,没有查到结果elasticsearch

    

 

    为何?ide

    字符串字段能够是文本类型(视为全文,如电子邮件正文)或关键字(视为精确值,如电子邮件地址或邮政编码)。精确值(如数字,日期和关键字)具备在添加到倒排索引的字段中指定的确切值,以使其可被搜索。测试

    可是,分析文本字段。这意味着它们的值首先经过一个分析器产生一个项目列表,而后将其添加到倒排索引中。ui

    分析文本的方法有不少种:默认的标准分析器会删除大部分的标点符号,将文本分解为单个的单词,并将其分解为小写字母。例如,标准分析仪会将字符串“Quick Brown Fox!”变成[quick,brown,fox]。编码

    先看Avenue的分析spa

    

    由于171 Putnam Avenue被分解为 171,putnam,avenue三个词,所以在Avenue时没法查询到,由于第一个字符是大写code

    下面作一个测试演示htm

    首先,建立一个索引,指定字段映射,并索引一个文档

    建立索引和索引数据

    

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
}

 

     一、full_text字段是文本类型,将被分析。

        二、exact_value字段是关键字类型,不会被分析。

     三、full_text倒排索引将包含术语:[quick,foxes]。

     四、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!" 
    }
  }
}

    一、此查询匹配,由于exact_value字段包含确切的术语Quick Foxes !.

     二、这个查询不匹配,由于full_text字段只包含quick和foxes这两个词。 它不包含确切的术语Quick Foxes !.

     三、术语foxes的查询匹配full_text字段。

     四、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
    }
  ]
}
相关文章
相关标签/搜索