博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch查询语句概述
阅读量:2217 次
发布时间:2019-05-07

本文共 1938 字,大约阅读时间需要 6 分钟。

我们从最简单的概念讲起

elasticsearch中查询语句叫DSL(Domain Specific Language)
查询语句由两种类型子句组成

  • 简单查询( Leaf query Cluase)
  • 复合查询(Compound query clauses)

查询子句的不同取决于他们是在查询子句上下文中使用还是在过滤子句上下文中使用。

查询上下文与过滤上下文的区别是
查询上下文指的是文档中是否存在匹配查询子句的内容,并计算得分。
过滤上下文指的是匹配到的内容是否满足过滤条件,例如时间是否大于2020-07-19
或者状态是否等于1之类的
以下查询示例满足如下条件

  • title中是否包含search
  • content是否包含elasticsearch
  • status 是否包含published
  • publish_date 是否在 2015-06-01之前
GET /_search{
"query": {
//query 上下文子句 "bool": {
//复合查询 "must": [ //包含 {
"match": {
"title": "Search" }}, //复合查询匹配条件1 {
"match": {
"content": "Elasticsearch" }} //复合查询匹配条件2 ], "filter": [ //过滤上下文子句 {
"term": {
"status": "published" }}, //过滤条件,精确匹配 {
"range": {
"publish_date": {
"gte": "2015-01-01" }}} //过滤条件范围匹配 ] } }}

从示例可以看出,过滤上下问子句包含在查询上下文子句中,也就是说只有,有查询才有过滤的必要。复合查询,只影响得分。

自己的示例演示如下

GET _search?filter_path=*.*._score{
"query":{
"bool":{
"must":[ {
"match":{
"productname":"商品"}}, {
"match":{
"productpic":"exportUpload"}} ] } }}

结果如下,我将内容使用filter_path进行过滤,可以看出来匹配程度最高的是第一个。

{
"hits" : {
"hits" : [ {
"_score" : 5.4368854 }, {
"_score" : 5.2295594 } ] }}

match_all

GET _search?filter_path=*.*._score{
"query": {
"match_all": {
"boost":1.2} }}

match_all匹配所有文档得分为1,通过boost可以改变得分,如上示例输出如下

{
"hits" : {
"hits" : [ {
"_score" : 1.2 }, {
"_score" : 1.2 } ] }}

全文查询

全文查询可以分文以下类型
match query
用于执行全文查询的标准查询,包括模糊匹配和短语或邻近查询
match_phrase query
与match查询类似,但用于匹配确切的短语或单词接近度匹配。
match_phrase_prefix query
match_phrase查询类似但是最右一个单词模糊如 I am a chin*
multi_match query
match查询的多字段版本。
common_terms query
一种更专业化的查询,它对不常见的词有更多的偏好。
query_string query
支持compact Lucene查询字符串语法,允许您在单个查询字符串中指定AND | OR | NOT条件和多字段搜索。这也是我们最常用的查询子句
simple_query_string
查询字符串语法的一个更简单、更健壮的版本,适合直接向用户公开。

转载地址:http://xpkfb.baihongyu.com/

你可能感兴趣的文章
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
【linux】nohup和&的作用
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>
剑指offer 19.二叉树的镜像
查看>>
剑指offer 20.顺时针打印矩阵
查看>>
剑指offer 21.包含min函数的栈
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
剑指offer 25.二叉树中和为某一值的路径
查看>>
剑指offer 60. 不用加减乘除做加法
查看>>
Leetcode C++《热题 Hot 100-14》283.移动零
查看>>
Leetcode C++《热题 Hot 100-15》437.路径总和III
查看>>
Leetcode C++《热题 Hot 100-17》461.汉明距离
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>