ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Elasticsearch常用查询

2022-05-26 01:02:00  阅读:188  来源: 互联网

标签:常用 how2java search product 查询 Elasticsearch place query


es和mysql类比

 

 

 

 

1、查询文档结构

GET how2java/product/_mapping

 

2.1、term查询 term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字去文档分 词库中去匹配内容。

GET how2java/product/_search
{
  "query": {
    "term": {
      "place.keyword": {
        "value": "江苏苏州"
      }
    }
  }
}

2.2、terms查询 terms和term的查询机制是一样,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找 到相应文档内容。

terms是在针对一个字段包含多个值的时候使用。

term:where place= 北京;

terms:where place= 北京 or place= ?or place= ?

GET how2java/product/_search
{
  "query": {
    "terms": {
      "place.keyword": [
        "北京",
        "上海"
      ]
    }
  }
}

 

3.1 match_all查询 查询全部内容,不指定任何查询条件。

POST how2java/product/_search
{
  "query": {
    "match_all": {}
  }
}

3.2 match查询  指定一个Field作为筛选的条件,采用and或者or的方式连接

POST how2java/product/_search
{
  "query": {
    "match": {
      "name": {
        "query": "中国 健康",
        "operator": "or"
      }
    }
  }
}

3.3 multi_match查询 multi_match针对多个field进行检索,多个field对应一个text。

POST how2java/product/_search
{
  "query": {
    "multi_match": {
      "query": "北京",
      "fields": ["name","category"]
    }
  }
}

 

4.1 id查询 只能用get 其余查询可以是get也可以是post

GET how2java/product/26469

4.2 ids查询

POST how2java/product/_search
{
  "query": {
    "ids": {
      "values": [26469, 26470]
    }
  }
}

 

5 prefix查询 前缀查询,可以通过一个关键字去指定一个Field的前缀,从而查询到指定的文档。(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)

POST how2java/product/_search
{
  "query": {
    "prefix": {
      "place": {
        "value": "武"
      }
    }
  }
}

 

6 wildcard查询 通配查询,和MySQL中的like是一个套路,可以在查询时,在字符串中指定通配符*和占位符?(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)

POST how2java/product/_search
{
  "query": {
    "wildcard": {
      "place.keyword": {
        "value": "江苏??"
      }
    }
  }
}

 

7 range查询 范围查询,只针对数值类型,对某一个Field进行大于或者小于的范围指 可以使用 gt:> gte:>= lt:< lte:<=

POST how2java/product/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

 

8 regexp查询 正则查询,通过你编写的正则表达式去匹配内容。(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)

POST how2java/product/_search
{
  "query": {
    "regexp": {
      "name":"包邮*"
    }
  }
}

 

9 delete-by-query 根据term,match等查询方式去删除大量的文档

 

10.1 bool复合查询

 复合过滤器,将你的多个查询条件,以一定的逻辑组合在一起。

must: 所有的条件,用must组合在一起,表示And的意思

must_not:将must_not中的条件,全部都不能匹配,标识Not的意思

should:所有的条件,用should组合在一起,表示Or的意思

POST how2java/product/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "place.keyword": {
              "value": "上海"
            }
          }
        },
        {
          "term": {
            "place.keyword": {
              "value": "北京"
            }
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gte": 100,
              "lte": 2000
            }
          }
        }
      ],
      "must": [
        {
          "match": {
            "name": "中国"
          }
        }
      ]
    }
  }
}

10.2 filter查询 也属于bool查询的一种

query,根据你的查询条件,去计算文档的匹配度得到一个分数,并且根据分数进行排序,不会做 缓存的。

filter,根据你的查询条件去查询文档,不去计算分数,而且filter会对经常被过滤的数据进行缓 存。

POST how2java/product/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term":{
            "place.keyword":"北京"
          }
        },
        {
          "range": {
            "price": {
              "lte": 10
            }
          }
        }
      ]
    }
  }
}

 

标签:常用,how2java,search,product,查询,Elasticsearch,place,query
来源: https://www.cnblogs.com/wscw/p/16311587.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有