ES文档搜索

发布于:2024-12-18 ⋅ 阅读:(31) ⋅ 点赞:(0)


文档结构

PUT /students
{
  "mappings":{
    "properties":{
      "id": {
            "type": "integer",
        "index": true
       },
         "name": {
            "type": "text",
            "store": true,
        "index": true,
            "analyzer": "ik_smart"
         },
      "info": {
            "type": "text",
            "store": true,
        "index": true,
            "analyzer": "ik_smart"
         }
     }
   }
}

match_all

描述:查询所有文档

GET /students/_search
{
  "query": {
    "match_all": {}
  }
}

match

描述:全文检索,将查询条件分词后搜索

GET /students/_search
{
  "query": {
    "match": {
      "info": "wunaiieq"//搜索字段:搜索条件
    }
  }
}

描述:带纠错功能(中文效果较弱)

GET /students/_search
{
  "query": {
    "match": {
      "info": {
        "query": "loveaa",//搜索条件
        "fuzziness": 2//允许错误字数
      }
    }
  }
}

match_phrase

描述:短语检索,搜索条件不做任何分词解析,在搜索字段对应的倒排索引中精确匹配

GET /students/_search
{
  "query": {
    "match_phrase": {
      "info": "喜欢"//查询条件,必须是关键词短语,由于不进行分词,因此,如果输入的是句子,则无法正常查找(除非一样)
    }
  }
}

term/terms

描述:单词/词组匹配,搜索条件不做任何分词解析,在搜索字段对应的倒排索引中精确匹配,和match_phrase方法类似

GET /students/_search
{
  "query": {
    "term": {
      "info": "成绩"
    }
  }
}
GET /students/_search
{
  "query": {
    "terms": {
      "info": ["成绩","喜欢"]//terms后面可以跟多个查询条件
    }
  }
}

range

描述:范围搜素,对数字类型的字段进行范围搜索

GET /students/_search
{
  "query": {
    "range": {
      "id": {		//这个id是文档的字段属性
        "gte": 1,	//起始值(包含值1)
        "lte": 20	//最终的值(包含值20)
      }
    }
  }
}

复合搜索

描述:多个查询条件,must,must_not,should,满足对应的条件即可

GET /students/_search
{
  "query": {
    "bool": {
      "must": [//必须满足的查询条件
        {
          "term": {
            "info": "成绩"  
          }
        },
        {
          "range": {
            "id": {
              "gte": 1,
              "lte": 3
            }
          }
        }
      ],
      "must_not": [//必须不满足的查询条件
        {
          "term": { 
            "id": 999
          }
        }
      ],
      "should": [//只要满足内部至少一个查询条件即可
        {
          "term": { 
            "id": 666
          }
        },
        {
          "term": { 
            "id": 3
          }
        }
      ]
    }
  }
}

结果排序

描述:默认使用相关度分数实现排序,当然允许通过搜索语法进行自定义
示例(自定义排序)
不能对text字段做排序,如果需要排序字符串可以使用keyword类型

GET /students/_search
{
  "query": {
    "match_all": {
    }
  },
  "sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ]
}

分页查询

描述:分页查询

GET /students/_search
{
  "query": {
    "match_all": {}
  },
  "from": 1,//从第1个开始查询(不包含第一条)
  "size": 1//每次查询显示1条数据
}

高亮查询

描述:返回查询结果时,如果匹配到输入的提示信息,则会给返回结果中的此内容增加一个标签(后续可用css之类的内容对标签进行高亮提示)

GET /students/_search
{
  "query": {
    "match": {
      "info": "喜欢"
    }
  },
  "highlight": {
    "fields": {
      "info": {
        "fragment_size": 20,	//返回高亮数据的最大长度
        "number_of_fragments": 5	//返回结果中最多可以包含几段不连续的文字
      }
    },
    "pre_tags":"<wunaiieq>",	//自定义标签
    "post_tags":"</wunaiieq>"	
  }
}

在这里插入图片描述

SQL语句查询

描述:这是测试功能,主要应用在ES7之后
暂时不学习,后续需要补上


网站公告

今日签到

点亮在社区的每一天
去签到