文章目录
- 前言
- 一、全文查询: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查询
添加的参数大致一样,我这边就不测试了。
总结
记录在工作当中会用到的情形,如果有新遇到的会再次添加。