ElasticSearch基本查询(Query查询)

Posted 周天祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch基本查询(Query查询)相关的知识,希望对你有一定的参考价值。

ElasticSearch基本查询(Query查询)   

1、数据准备
2、term查询和terms查询
3、控制查询返回的数量
4、返回版本号
5、match查询
6、指定返回的字段、显示字段
7、显示要的字段、去除不需要的字段
8、排序
9、 范围查询
10、wildcard查询
11、fuzzy实现模糊查询
12、高亮搜索结果

对人工智能感兴趣的同学,可以点击以下链接:

现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。

https://www.cbedai.net/u014646662

1、数据准备


put lib3

  "settings":
    "number_of_shards":3,
    "number_of_replicas":0
  ,
  "mappings":
    "user":
      "properties":
        "name":"type":"text",
        "address":"type":"text",
        "age":"type":"integer",
        "interests":"type":"text",
        "birthday":"type":"date"
      
    
  


post /lib3/user

  "name":"lisi",
  "address":"shandong",
  "age":18,
  "interests":"youyong shufa changge tiaowu",
  "birthday":"2001-01-19"


post /lib3/user

  "name":"wangwu",
  "address":"zhejiang",
  "age":22,
  "interests":"youyong shufa",
  "birthday":"1997-01-19"


post /lib3/user

  "name":"zhangsan",
  "address":"zhejiang",
  "age":20,
  "interests":"youyong shufa changge changpao",
  "birthday":"1999-08-29"


post /lib3/user

  "name":"youyong",
  "address":"zhejiang",
  "age":20,
  "interests":"youyong shufa changge changpao",
  "birthday":"1999-08-29"

测试一下

get /lib3/user/_search?q=name:lisi
get /lib3/user/_search?q=name:wangwu&sort=age:desc

2、term查询和terms查询

term query会去倒排索引中寻找确切的term,它并不知道分词器的存在。这种查询适合keyword 、numeric、date。

term:查询某个字段里含有某个关键词的文档

terms:查询某个字段里含有多个关键词的文档

a、term 和 terms 是 包含(contains) 操作,而非 等值(equals) (判断)

b、不知道分词器的存在,所以不会去分词,

c、所谓的包含是文档分词结果某个分词是否相等,即文档是否包含这个分词

d、因为是在分词结果中匹配,所以大写要转换为小写,大写字母是匹配不到

get /lib3/user/_search/

  "query":"term": "interests":"youyong"


get lib3/user/_search/

  "query":"terms":"interests":["shufa","youyong"]

3、控制查询返回的数量

get lib3/user/_search

  "from":0,
  "size":2,
  "query":
    "terms":
      "interests": ["changge","tiaowu"]
    
  

4、返回版本号

get lib3/user/_search

  "version":true,
  "query":
    "term":"interests": "changge"
  

5、match查询

  • match query知道分词器的存在,会对filed进行分词操作,然后再查询
  • match_all:查询所有文档
  • multi_match:可以指定多个字段
  • match_phrase:短语匹配查询,ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变
GET lib3/user/_search

  "query":"match":"age": 20

GET lib3/user/_search

  "query":"match":"interests": "changge"


GET lib3/user/_search

  "query":
    "match_all": 
  


GET lib3/user/_search

  "query":
    "multi_match": 
      "query": "youyong",
      "fields":["interests","name"]
    
  


get lib3/user/_search

  "query":
    "match_phrase":"interests": "youyong shufa"
  

6、指定返回的字段

get lib3/user/_search

  "_source":["name","age"],
  "query":
    "match": 
      "interests": "changge"
    
  

7、显示要的字段、去除不需要的字段、可以使用通配符*

get lib3/user/_search

  "query":
    "match_all": 
  ,
  "_source":
     "includes": "addr*",
     "excludes": ["name","bir*"]
  

8、排序

前缀匹配查询"match_phrase_prefix", 并使用sort实现排序:desc:降序,asc升序

GET /lib3/user/_search

    "query": 
        "match_phrase_prefix": 
          "interests": "you"
        
    ,
    
    "sort":[
      
        "age":"order": "desc"
      
      ]

9、 范围查询

range:实现范围查询

参数:from,to,include_lower,include_upper,boost

include_lower:是否包含范围的左边界,默认是true

include_upper:是否包含范围的右边界,默认是true

GET /lib3/user/_search

    "query": 
        "range": 
            "birthday": 
                "from": "1990-10-10",
                "to": "2000-05-01",
                 "include_lower": true,
                "include_upper": false
            
        
    



GET /lib3/user/_search

    "query": 
        "range": 
            "age": 
                "from": 18,
                "to": 25,
                "include_lower": true,
                "include_upper": false
            
        
    

10、wildcard查询

允许使用通配符* 和 ?来进行查询
*代表0个或多个字符
?代表任意一个字符

GET /lib3/user/_search

    "query": 
        "wildcard": 
             "name": "wang*"
        
    



GET /lib3/user/_search

    "query": 
        "wildcard": 
             "name": "li?i"
        
    

11、fuzzy实现模糊查询

fuzzy 查询是 term 查询的模糊等价。

a、是 包含(contains) 操作,而非 等值(equals) (判断)。

b、不知道分词器的存在,所以不会去分词,

c、所谓的包含是文档分词结果某个分词是否包含,不是整个文档是否包含

d、因为是在分词结果中匹配,所以大写要转换为小写,大写字母是匹配不到

value:查询的关键字
boost:查询的权值,默认值是1.0
min_similarity:设置匹配的最小相似度,默认值为0.5,对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型取值为1d,1m等,1d就代表1天
prefix_length:指明区分词项的共同前缀长度,默认是0
max_expansions:查询中的词项可以扩展的数目,默认可以无限大

GET /lib3/user/_search

    "query": 
        "fuzzy": 
             "interests": "chagge"
        
    


GET /lib3/user/_search

    "query": 
        "fuzzy": 
             "interests": 
                 "value": "chagge"
             
        
    

12、高亮搜索结果

GET /lib3/user/_search

    "query":
        "match":
            "interests": "changge"
        
    ,
    "highlight": 
        "fields": 
             "interests": 
        
    

 

以上是关于ElasticSearch基本查询(Query查询)的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch基本查询

Elasticsearch按请求体基本查询

Elasticsearch 查询语法 --- 2022-04-03

elasticsearch 的基本查询语法使用(下)

Elasticsearch 数据查询

Elasticsearch:以更简单的方式编写具有逻辑条件的 Elasticsearch 查询 - query_string