elasticsearch研习(三)

#精确查询/模糊查询/term/match/terms/bool/should
PUT zhifou/doc/1
{
  "name":"顾老二",
  "age":30,
  "from": "gu",
  "desc": "皮肤黑、武器长、性格直",
  "tags": ["黑", "长", "直"]
}
#结果过滤:_source
GET zhifou/doc/_search
{
  "query": {
    "match": {
      "name": "顾老二"
    }
  },
  "_source": ["name", "age"]
}

#高亮显示
PUT zhifou/doc/4
{
  "name":"石头",
  "age":29,
  "from":"gu",
  "desc":"粗中有细,狐假虎威",
  "tags":["粗", "大","猛"]
}

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "name": "石头"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}
#我们发现name被html高亮显示了。

#term查询查找包含文档精确的倒排索引指定的词条。也就是精确查找。
#term和match的区别是:
#
#    match是经过analyer的,也就是说,文档首先被分析器给处理了。根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配。
#    term则不经过分词,它是直接去倒排索引中查找了精确的值了。

PUT w1
{
  "mappings": {
    "doc": {
      "properties":{
        "t1":{
          "type": "text"
        },
        "t2": {
          "type": "keyword"
        }
      }
    }
  }
}

PUT w1/doc/1
{
  "t1": "hi single dog",
  "t2": "hi single dog"
}
#上例的w1索引中,其字段t1再被查询时会被分析器进行分析后匹配查询。而t2属于keyword类型,不会被分析器处理。也就是下面的效果:
GET _analyze
{
  "analyzer": "keyword",
  "text": "hi single dog"
}
# keyword的结果:["hi single dog"]
GET _analyze
{
  "analyzer": "standard",
  "text": "hi single dog"
}
# standard的结果:["hi", "single", "dog"]
GET w1/doc/_search
{
  "query": {
    "term": {
      "t1": "hi" 
    }
  }
}
GET w1/doc/_search
{
  "query": {
    "term": {
      "t2": "hi" 
    }
  }
}
GET w1/doc/_search
{
  "query": {
    "match": {
      "t2": "hi single dog" 
    }
  }
}

PUT w1/doc/2
{
  "t1": "20",
  "t2": "2019-4-16"
}
PUT w1/doc/3
{
  "t1": "30",
  "t2": "2019-4-17"
}


GET w1/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "20"
          }
        },
        {
          "term": {
            "t1": "30"
          }
        }
      ]
    }
  }
}

#除了使用bool查询之外,我们还可以使用terms查询。terms就相当于term的复数形式(单词里面的s嘛)。使用方式与term也一样,只是将多个条件改为数组即可
GET w1/doc/_search
{
  "query": {
    "terms": {
      "t1": ["20", "30"]
    }
  }
}

GET w1/doc/_search
{
  "query": {
    "terms": {
      "t2": ["2019-4-16", "2019-4-17"]
    }
  }
}

版权声明:除特别注明外,本站所有文章均为王晨曦个人站点原创

转载请注明:出处来自王晨曦个人站点 » elasticsearch研习(三)

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注