学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • Java基础

  • Java集合

  • MySQL

  • Redis

  • JVM

  • 多线程

  • 计算机网络

  • Spring

  • Kafka

  • Elasticsearch

    • ElasticSearch基本概念
    • 文档基本操作
    • 倒排索引
    • 分词器
    • Mapping和常见字段类型
    • Index Template&Dynamic Template
    • Elasticsearch聚合分析简介
    • 基于词项和基于全文的搜索
    • 结构化搜索
    • 搜索的相关性算分
    • 单字符串多字段查询
      • 一、Dis Max Query
        • 1、基础案例
        • 2、Dis Max Query
      • 二、Multi Match
        • 1、基础语法结构
        • 2、案例
      • 参考
    • SearchTemplate 和 Index Alias 查询
    • Function Score Query 优化算分
    • Term&Phrase Suggester
    • 自动补全于基于上下文的提示
  • Python

  • 面试专题

  • 知识库
  • Elasticsearch
旭日
2023-06-05
目录

单字符串多字段查询

# 一、Dis Max Query

# 1、基础案例

首先来看一个简单的查询案例:

PUT /blogs/_doc/1
{
    "title": "Quick brown rabbits",
    "body":  "Brown rabbits are commonly seen."
}

PUT /blogs/_doc/2
{
    "title": "Keeping pets healthy",
    "body":  "My quick brown fox eats rabbits on a regular basis."
}

POST /blogs/_search
{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

由于数据一中title和body字段都含有Brown,而数据二只有body字段含有brown fox,should的查询过程如下:

  • 查询should语句中的子查询
  • 加和子查询的评分
  • 乘以匹配语句的总数
  • 除以所有语句的总数

通过这样的算分流程,得到数据一的匹配程度更高,但是如果我们仅仅想要的某一个字段匹配最高,比如在这个例子中,数据二的body字段匹配程度最高。

# 2、Dis Max Query

POST blogs/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Quick pets" }},
                { "match": { "body":  "Quick pets" }}
            ]
        }
    }
}

  • 数据一只有title字段能够匹配Quick,但是Quick在title字段匹配程度高。
  • 数据二title字段和body字段能够匹配pets,但是pets在两个字短匹配程度相对较低。

这种情况的竞争就是当字段之间相互竞争,又相互关联的时候,我们只想要查询出最佳字段,也就是我们最匹配的字段。

# 二、Multi Match

# 1、基础语法结构

{
   "query": {
        "multi_match": {
            "query":  "barking dogs",
            "type":   "most_fields",
            "fields": [ "title", "title.std" ]
        }
    }
}

# 2、案例

DELETE /titles

PUT /titles
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "english"
      }
    }
  }
}

POST titles/_bulk
{ "index": { "_id": 1 }}
{ "title": "My dog barks" }
{ "index": { "_id": 2 }}
{ "title": "I see a lot of barking dogs on the road " }


GET titles/_search
{
  "query": {
    "match": {
      "title": "barking dogs"
    }
  }
}

在title字段的匹配上,id为1的语句整体要简短,同时采用了英文分词器,barking dogs会被分成bark和dogs两个单词,所以id为1的语句匹配程度更高。

DELETE /titles
PUT /titles
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "english",
        "fields": {"std": {"type": "text","analyzer": "standard"}}
      }
    }
  }
}

POST titles/_bulk
{ "index": { "_id": 1 }}
{ "title": "My dog barks" }
{ "index": { "_id": 2 }}
{ "title": "I see a lot of barking dogs on the road " }

GET /titles/_search
{
   "query": {
        "multi_match": {
            "query":  "barking dogs",
            "type":   "most_fields",
            "fields": [ "title", "title.std" ]
        }
    }
}

GET /titles/_search
{
   "query": {
        "multi_match": {
            "query":  "barking dogs",
            "type":   "most_fields",
            "fields": [ "title^10", "title.std" ] // 权重
        }
    }
}

通过为title字段增加一个子字段std,这个字段采用标准的分词器,来对算分进行综合的影响。

# 参考

Elasticsearch 核心技术与实战 (opens new window)

#Elasticsearch
上次更新: 2024/06/29, 15:13:44
搜索的相关性算分
SearchTemplate 和 Index Alias 查询

← 搜索的相关性算分 SearchTemplate 和 Index Alias 查询→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式