ElasticSearch7.x入门教程之全文搜索(五)

devtools/2024/11/29 6:25:54/

文章目录

  • 前言
  • 一、全文查询:match query
  • 二、词项查询:term query
  • 总结


前言

搜索是 ElasticSearch 最为丰富有趣的功能,也是平常在工作当中用得最多的地方。

我相信,基本上也只是用到ES的搜索,比如全文查询、词项查询、复合查询、嵌套查询、位置查询、特殊查询等等。

案例用的数据,是自己通过SpringData导入的,后面再来记录结合Java使用。
索引building_info(建筑地址索引)的mapping如下:

"mappings" : {"properties" : {"_class" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"address" : { # 搜索的全名地址"type" : "text","analyzer" : "ik_smart"},"city_code" : { # 市"type" : "keyword"},"county" : {"type" : "keyword"},"create_time" : {"type" : "date"},"floor" : { # 楼层"type" : "keyword"},"id" : {"type" : "long"},"name" : { # 简称地址"type" : "text","analyzer" : "ik_smart"},"town_office" : { # 街道办事处"type" : "text","analyzer" : "ik_smart"},"type" : { # 房屋类型(城市住宅等)"type" : "keyword"}}}

一、全文查询:match query

  • 1、简单搜索,不写查询条件,查询所有,默认查询 前10 条记录。
GET /building_info/_search
{"query": {"match_all": {}}
}# 或者
GET /building_info/_search
  • 2、分页查询,只写分页参数,es 中也可以像关系型数据库一样,给一个分页参数,指定from参数和size参数。但是es中,默认最大跨度为10000条;查询到越是后面的数据,会出现深度分页问题,官方推荐就不能这样查询了,后面再来记录官网推荐的,解决深度分页问题
GET /building_info/_search
{"query": {"match_all": {}},"from": 0, "size": 20
}
  • 3、查询结果过滤返回字段
GET /building_info/_search
{"query": {"match_all": {}},"_source": ["name","address","city_code"]
}
  • 4、文档数的最小评分,有的文档得分特别低,说明这个文档和我们查询的关键字相关度很低。我们可以设置一个最低分,只有得分超过最低分的文档才会被返回。
GET /building_info/_search
{"query": {"match_all": {}},"min_score": 1.25
}
  • 5、根据关键字查询
GET /building_info/_search
{"query": {"match": {"address": "草堂北路"}}
}

先对草堂北路进行ik_smart分词,分解成草堂北路,分词之后,再去查询。
只要文档中包含一个分词结果,就回返回文档。换句话说,默认词项之间是 or 的关系,如果想要修改,也可以改为and

GET /building_info/_search
{"query": {"match": {"address": {"query": "草堂北路","operator": "and"}}}
}

此时就回要求文档中必须同时包含草堂北路两个词。

  • 6、查询关键字高亮
    在这里插入图片描述默认是<em>标签,可以修改。
"highlight": {"fields": {"address": {"pre_tags": "<bold>","post_tags": "</bold>"}}}

二、词项查询:term query

词项查询,就是根据词去查询,查询指定字段中包含给定单词的文档,term 查询不被分词,只有搜索的词和文档中的词精确匹配,才会返回文档。应用场景如:人名、地名等等。

比如:查询 type等于城市住宅的文档:

GET /building_info/_search
{"query": {"term": {"type": "城市住宅"}}
}

结果如下:
在这里插入图片描述
词项term可以添加的参数和全文match查询添加的参数大致一样,我这边就不测试了。


总结

记录在工作当中会用到的情形,如果有新遇到的会再次添加。


http://www.ppmy.cn/devtools/137848.html

相关文章

wxFormBuilder:可视化设计、学习wxWidgets自带UI控件的好工具

wxFormBuilder很快就能拼出一个界面&#xff0c;而且可以直接出对应的代码&#xff0c;拷贝到项目里小改一下就能用。

简单好用的折线图绘制!

折线图的概念及作用&#xff1a; 折线图&#xff08;Line Chart&#xff09;是一种常见的图表类型&#xff0c;用于展示数据的变化趋势或时间序列数据。它通过一系列的数据点&#xff08;通常表示为坐标系中的点&#xff09;与这些点之间的线段相连&#xff0c;直观地展示变量…

Qt中QML和C++混合编程

使用QML开发界面 加载QML的3种方式 支持文件路径、资源&#xff08;资源文件&#xff09;路径&#xff0c;网络路径 使用QQmlApplicationEngine 这个类结合了QQmlEngine和QQmlComponent QGuiApplication app(argc,argv);//1、使用QQmlApplicationEngine加载qml代码&#x…

深入理解React Hooks:使用useState和useEffect

引言 React Hooks是React 16.8引入的一项强大功能&#xff0c;它使函数组件能够使用状态和其他React特性。本文将深入探讨两个最常用的Hooks&#xff1a;useState和useEffect&#xff0c;并通过实际代码示例展示它们的使用方法。 1. 什么是React Hooks&#xff1f; React Ho…

第二章:编写第一个 Go 程序 2.Go 语言的基本结构 --Go 语言轻松入门

Go 语言是一种简洁、高效且易于学习的编程语言&#xff0c;它由Google开发。一个基本的Go程序通常包含以下几个部分&#xff1a; 包声明&#xff1a;在Go中&#xff0c;每个文件都必须属于一个包。最常用的包是main&#xff0c;它表示这个文件可以作为独立的应用程序运行。包声…

C++:使用CRTP代替虚函数实现静态多态的效果

这个代码实现了一个 Curiously Recurring Template Pattern (CRTP)&#xff0c;它是一种通过模板实现静态多态的方法。在这个模式中&#xff0c;基类使用其派生类作为模板参数&#xff0c;从而实现类似虚函数的行为&#xff0c;但没有动态多态的开销。 调用示例 下面是如何调用…

工业物联网网关在设备接入物联网中的核心作用

一、工业物联网网关的定义与功能 工业物联网网关是工业领域中的一种重要设备&#xff0c;它位于工业物联网系统的边缘位置&#xff0c;负责连接、管理和协调工业设备与云平台之间的通信。作为边缘计算的关键组件&#xff0c;工业物联网网关能够实现工业设备、传感器、PLC、DCS…

linux线程资源回收

在 POSIX 线程&#xff08;pthread&#xff09;中&#xff0c;线程终止后需要回收的资源主要包括以下几个方面&#xff1a; 1. 线程栈 每个线程都有自己的栈空间&#xff0c;用于存储局部变量、函数调用帧等。当线程终止时&#xff0c;如果没有及时回收栈空间&#xff0c;可能…