EleasticSearch(四)进阶查询

简介: EleasticSearch(四)进阶查询

多字段或语句查询

GET /book/_validate/query?explain
{
  "query": {
    "multi_match": {
      "query": "童话故事大全",
      "fields": ["name", "description"]
    }
  }
}
  • 解释模式
GET /book/_validate/query?explain
{
  "query": {
    "multi_match": {
      "query": "童话故事大全",
      "fields": ["name", "description"]
    }
  }
}
  • match
GET /book/_validate/query?explain
{
  "query": {
    "multi_match": {
      "query": "童话故事大全",
      "fields": ["name", "description"]
    }
  }
}
  • 对分词or或者and查询
GET /book/_search
{
  "query": {
    "match": {
      "name": {
        "query": "童话故事大全",
        "operator": "and"
      }
    }
  }
}
  • term
GET /book/_search
{
  "query": {
    "term": {
      "name": {
        "value": "中华故事"
      }
    }
  }
}

不会对name进行分词,直接使用中华故事进行作关键字查询

GET /book/_search
{
  "query": {
    "terms": {
      "name": [
        "中华",
        "故事"
      ]
    }
  }
}
  • 中华故事其中之一即可

  • 最小匹配查询
#分析一下看下分了几个词
GET /book/_analyze
{
  "field": "name",
  "text": "故事大全"
}
#最小匹配查询
GET /book/_search
{
  "query": {
    "match": {
      "name": {
        "query": "故事大全",
        #最少匹配两个词
        "minimum_should_match": 2
      }
    }
  }
}
  • 多字段添加权重
GET /book/_search
{
  "query": {
    "multi_match": {
      "query": "花朵",
      "fields": ["name^10","description"]
    }
  }
}
  • 权重平滑处理,更加突出权重,最大值加上其他值的0.3倍
GET /book/_search
{
  "query": {
    "multi_match": {
      "query": "花朵",
      "fields": ["name^10","description"],
      "tie_breaker": 0.3
    }
  }
}
  • 取最好的字段
GET /book/_search
{
  "query": {
    "multi_match": {
      "query": "大自然的旅行故事",
      "fields": ["name","description"],
      "type": "best_fields"
    }
  }
}
  • 多字段分值相加
GET /book/_search
{
  "query": {
    "multi_match": {
      "query": "大自然的旅行故事",
      "fields": ["name","description"],
      "type": "most_fields"
    }
  }
}
  • query_string
GET /book/_search
{
  "query": {
    "query_string": {
      "default_field": "name",
      "query": "大自然 AND 旅行"
    }
  }
}

可使用 AND OR NOT

  • bool查询
  • should查询,其中有一个条件为true即可,但true越多的排在越前面
GET /book/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "安徒生"
          }
        },
        {
          "match": {
            "description": "丑小鸭"
          }
        }
      ]
    }
  }
}
  • must查询,必须全部为true
GET /book/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "安徒生"
          }
        },
        {
          "match": {
            "description": "丑小鸭"
          }
        }
      ]
    }
  }
}
  • must_not,必须全部为false
GET /book/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "安徒生"
          }
        },
        {
          "match": {
            "description": "丑小鸭"
          }
        }
      ]
    }
  }
}
  • filter
GET /book/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "price": {
              "lte": 2000,
              "gte": 1
            }
          }
        },
        {
          "match": {
            "name":"故事"
          }
        }
      ]
    }
  } ,
  "sort": [
    {
      "commentNum": {
        "order": "desc"
      }
    }
  ]
}
  • 同义词查询
  • 在每个es的config/analysis-ik新建文件夹synonyms.txt
  • 编辑以下内容
苹果,iphone,apple
美丽,漂亮,气质好
  • 建立索引
PUT /tests
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1,
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym",
          "synonyms_path": "analysis-ik/synonyms.txt"
        }
      },
      "analyzer": {
        "ik_syno": {
          "type": "custom",
          "tokenizer": "ik_smart",
          "filter": [
            "my_synonym_filter"
          ]
        },
        "ik_syno_max": {
          "type": "custom",
          "tokenizer": "ik_max_word",
          "filter": [
            "my_synonym_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "text",
          "analyzer": "ik_syno_max",
          "search_analyzer": "ik_syno"
        }
      }
    }
  }
}
  • 插入两条数据
POST /tests/_doc/1/_create
{
  "name":"苹果"
}
POST /tests/_doc/2/_create
{
  "name":"apple"
}
  • 尝试同义词查询
GET /tests/_search
{
  "query": {
    "match": {
      "name": "iphone"
    }
  }
}
  • 查询结果
{
  "took" : 38,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.33425623,
    "hits" : [
      {
        "_index" : "tests",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.33425623,
        "_source" : {
          "name" : "苹果"
        }
      },
      {
        "_index" : "tests",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.33425623,
        "_source" : {
          "name" : "apple"
        }
      }
    ]
  }
}
目录
相关文章
|
测试技术 持续交付 开发工具
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
335 2
|
前端开发
饿了么el-dialog自定义内容以及el-dialog自定义样式
饿了么el-dialog自定义内容以及el-dialog自定义样式
1073 0
|
8月前
|
存储 运维 监控
2025年4月深度评测:10款最值得部署的网络监控软件
真正卓越的运维不仅仅是对当前问题的解决,更在于对未来的预测和防范。 OpManager 的预测报表功能可以为用户提供有关未来存储需求增长方式的直观展示,帮助用户进行基于需求的容量规划,从而避免成本浪费。
387 0
|
9月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1441 21
|
Dart 开发工具 Android开发
快速集成 Flutter Shorebird 热更新
Flutter Shorebird 是一种云端代码推送服务,可以让开发者在几分钟内集成,无需修改代码即可将更新推送到任何 Dart 代码,支持所有 Android 和 iOS 设备,并符合 App Store 和 Play Store 的规定。Shorebird 最大的优点是无代码侵入,快速集成,设计优秀。
657 2
快速集成 Flutter Shorebird 热更新
|
移动开发 C++
花最少的时间点亮OLED之RT-Thread u8g2之(DIY一个小小天气站+万年历)
花最少的时间点亮OLED之RT-Thread u8g2之(DIY一个小小天气站+万年历)
318 0
|
传感器 算法 定位技术
Python中gdal实现MODIS卫星遥感影像产品栅格数据读取处理与质量控制QC波段筛选掩膜
Python中gdal实现MODIS卫星遥感影像产品栅格数据读取处理与质量控制QC波段筛选掩膜
396 1
|
机器学习/深度学习 安全 算法
【网络安全】隐私计算迎来千亿级风口,一文讲清它的技术理论基础。
【网络安全】隐私计算迎来千亿级风口,一文讲清它的技术理论基础。
251 0
3.4bochs的调试方法
3.4bochs的调试方法
441 0
|
存储 监控 安全
计算机网络硬件
一、计算机网络硬件 计算机网络硬件是指构成计算机网络的物理设备和组件,包括以下几个主要部分: 1. 网络接口卡(Network Interface Card, NIC):也称为网卡,是连接计算机到网络的接口设备。它负责将计算机内部的数据转换为网络可以识别和传输的格式,同时也负责将网络传输的数据转换为计算机可以理解和处理的格式。 2. 集线器(Hub):是一种用于将多个计算机连接在一起的设备。它通过物理层的广播方式将数据从一个端口广播到其他所有端口,所有连接在集线器上的计算机都可以接收到这些数据。 3. 交换机(Switch):与集线器类似,也是用于将多个计算机连接在一起的设备。但是交换机通过数
371 0