ES花式查询
简单搜索
PUT /test3/_doc/2
{
"name": "JonathanLee",
"age": 23
}
GET /test3/_doc/2
简单的条件查询,可以根据默认的映射规则,产生基本的查询
GET /test3/_doc/_search?q=name:JonathanLee
复杂搜索
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "JonathanLee"
}
}
}
多添加几条数据方便观察
PUT /test3/_doc/3
{
"name": "小灰灰",
"age": 18
}
PUT /test3/_doc/4
{
"name": "灰灰",
"age": 3
}
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "灰灰"
}
}
}
hits
- 索引和文档的信息
- 查询的结果总数
- 然后就是查询出来的具体的文档
- 数据中的东西都可以遍历出来
- 分数score,我们可以通过来判断谁更加符合结果
输出结果,不想要那么多,结果的过滤
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "灰灰"
}
},
"_source": ["name"]
}
之后使用Java操作elasticsearch,所有的方法和对象就是这里面的key
排序
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "灰灰"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
分页
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "灰灰"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 1
}
数据下标还是从0开始的,和MySQL差不多,数据结构都是一样的
布尔值查询
must(and)所有的条件都要符合,多条件查询
GET /test3/_doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "灰灰"
}
},
{
"match": {
"age": 18
}
}
]
}
}
}
should(or)其中的条件满足一个就可以了
GET /test3/_doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "灰灰"
}
},
{
"match": {
"age": 18
}
}
]
}
}
}
must_not(not),查询年龄不是3岁的人
GET /test3/_doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"age": 3
}
}
]
}
}
}
过滤器Filter
可以使用filter,进行数据过滤,可以使用多个条件进行过滤
GET /test3/_doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "灰灰"
}
}
],
"filter": {
"range": {
"age": {
"lt": 23
}
}
}
}
}
}
- gt:大于
- lt:小于
- gte:大于等于
- lte:小于等于
🐤匹配多个条件
PUT /test3/_doc/5
{
"name": "BNTang",
"age": 45,
"tags": ["男", "宅男"]
}
GET /test3/_doc/_search
{
"query": {
"match": {
"tags": "男 技术"
}
}
}
- 多个条件使用空格隔开
- 只要满足其中一个,即可被查出
- 这个时候可以通过分值基本的判断
🐸精确查询
- term查询是直接通过倒排索引指定的词条进行精确查询
关于分词
- term:直接查询精确的
- match:会使用分词器解析(先分析文档,然后在通过分析的文档进行查询)
两个类型
- text
- keyword
PUT /testdb
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"desc": {
"type": "keyword"
}
}
}
}
PUT /testdb/_doc/1
{
"name": "灰灰说Java name",
"desc": "灰灰说Java desc"
}
PUT /testdb/_doc/2
{
"name": "灰灰说Java name2",
"desc": "灰灰说Java desc2"
}
以上是创建一个索引,并且添加好测试数据
GET _analyze
{
"analyzer": "keyword",
"text": "灰灰说Java name"
}
没有被分析
GET _analyze
{
"analyzer": "standard",
"text": "灰灰说Java name"
}
可以看到被拆分了
GET /testdb/_search
{
"query": {
"term": {
"name": "灰"
}
}
}
GET /testdb/_search
{
"query": {
"term": {
"desc": "灰灰说Java desc"
}
}
}
- keyword字段类型不会被分词器解析
多个值匹配精确查询
PUT /testdb/_doc/3
{
"t1": "22",
"t2": "2020-8-17"
}
PUT /testdb/_doc/4
{
"t1": "33",
"t2": "2020-8-18"
}
GET /testdb/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"t1": "22"
}
},
{
"term": {
"t1": "33"
}
}
]
}
}
}
高亮查询
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "灰"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
- 搜索相关的结果可以高亮显示
🐸自定义搜索高亮条件
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "灰"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}
标签:
ElasticSearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具