elasticsearch搜索引擎的常用方法
1、term和terms
term和terms等查询,不会对查询对字段进行分词处理,适合于date、num、id等确切数据进行搜索
如果需要查询keywords,则查询等keywords必须是查询字段中可以分出来的词,如果不是,则无法查询到数据。
例如:age字段包含的值为80后、90后。使用term查询,{"term":{"age":"80后"}} 这样是无法查询到age是"80后"的数据的,因为term不会对"80后"进行分词,而es中存储的age字段,会把"80后"分成“80”和“后”,没有“80后”,所以使用term无法查询到
term查询某一个关键词的数据:
# 查询content含有“学习”关键词的数据
GET index_1/_search
{
"query": {
"bool": {
"filter": {
"term": {
"content": "学习"
}
}
}
}
}
terms查询某些关键词的数据:
# 查询content中含有“学习”和“生活”的数据
GET index_1/_search
{
"query": {
"bool": {
"filter": {
"terms": {
"content": [
"学习",
"生活"
]
}
}
}
}
}
2、match
match的所有方法,都会对字段进行分词,所查询的字段数据只要包含分词后结果的一个,就会被查询到
例如:age的数据包含有80后、90后,使用 {"match":{"age":"80后"}} 查询,会把所有的数据都查询出来。
分析:match会把“80后”分词为“80”和“后”,而es也会讲age分词为“80“、“后”,“90”、“后”,所有数据都包含”后“,所以会被全部查找出来
match查找age是80后的字段:
GET index_1/_search
{
"query": {
"bool": {
"filter": {
"match": {
"age": "80后"
}
}
}
}
}
结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 6433,
"max_score": 0,
"hits": [
{
"_index": "index_1",
"_type": "type_1",
"_id": "1",
"_score": 0,
"_source": {
"age": "70后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "80后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "90后"
...}
}
]
}
}
match_phrase:短语匹配查询,必须匹配短语中的所有分词,并且保证各个分词的相对位置不变
例如:age的数据包含有80后、90后,使用 {"match_phrase":{"age":"80后"}} 查询,只会把age字段是“80后”的数据查询出来。
分析:match_phrase会把“80后”分词为“80”和“后”,而es也会讲age分词为“80“、“后”,“90”、“后”,查询的时候,只会查询“80”后面的分词是“后”的数据
match_phrase查找age是80后的字段:
GET index_1/_search
{
"query": {
"bool": {
"filter": {
"match_phrase": {
"age": "80后"
}
}
}
}
}
结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 6433,
"max_score": 0,
"hits": [
{
"_index": "index_1",
"_type": "type_1",
"_id": "1",
"_score": 0,
"_source": {
"age": "80后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "80后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "80后"
...}
}
]
}
}
multi_match:查询多个字段包含某个关键词的数据
# 查询content或education中含有"大学"的数据
GET index_1/_search
{
"query": {
"bool": {
"filter": {
"multi_match": {
"query": "大学",
"fields": ["content", "education"]
}
}
}
}
}
match_all:查询所有文档
GET index_1/_search
{
"query": {
"match_all": {}
}
}
3、range
range范围查找,查找某一范围的所有数据
gt:大于
gte:大于等于
lt:小于
lte:小于等于
# 查询时间大于等于2019-08-10 10:08:29,小于等于2019-08-13 10:08:29的数据
GET index_4/_search
{
"query": {
"bool": {
"filter": {
"range": {
"date": {
"gte": "2019-08-10 10:08:29",
"lte": "2019-08-13 10:08:29"
}
}
}
}
}
}
4、sort
sort按照某些字段对数据进行排序,可以是一个字段,也可以是多个字段
desc:降序
asc:生序
# 查询数据按照时间的降序排列
GET index_1/_search
{
"sort": [
{
"date": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}
5、_source
对于搜索的结果,只关注某些字段的值
# 查询所有的数据的name和age
GET index_1/_search
{
"_source": ["name", "age"],
"query": {
"match_all": {}
}
}
6、from和size
from:从某个位置开始查询,最小为0,某些情况下可以为-1(下一篇说明)
size:查询长度
from+size不能大于10000,否则es会报错(下一篇解决)
# 查询前20条数据,并按照date的降序排列
GET index_1/_search
{
"from": 0,
"size": 20,
"sort": [
{
"date": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}
7、fuzzy
模糊匹配
value:查询包含某关键字
boost:增加查询的权值,默认值是1.0,必须于value同用,涉及字段_score(es默认按照_score排序)
fuzziness:设置匹配的最小相似度,默认值0.5,对于字符串,取值0-1(包括0和1);对于数值,取值可能大于1;对于日期取值为1d,1m等
prefix_length:公共前缀长度,默认为0
max_expansions:指定可被扩大到的最大词条数,默认为无限制
GET index_4/_search
{
"query": {
"fuzzy": {
"type": {
"value": "分期",
"boost": 0.5
}
}
}
}
8、wildcard
通配符查询
*:匹配0或多个字符
?:匹配任意字符
注意:使用wildcard的字段类型需要是keyword,切不分词;尽量少用,效率较低
GET index_1/_search
{
"query": {
"wildcard": {
"content": {
"value": "*学习*"
}
}
}
}
采自于 https://blog.csdn.net/Misaki_root/article/details/101203647?spm=1001.2014.3001.5501
elasticsearch搜索引擎的常用方法的更多相关文章
- elasticsearch搜索引擎环境的搭建
elasticsearch 搜索引擎 解决了什么问题:在我们数据量很大时,我们使用模糊查询会使索引列的索引消失,这样使用elasticsearch来提高查询效率. 存在什么问题:有时我们查询的词,el ...
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...
- 第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页
第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页 逻辑处理函数 计算搜索耗时 在开始搜索前:start_time ...
- 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能
第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...
- 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能
第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...
- 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中
第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...
- 第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询
第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询 bool查询说明 filter:[],字段的过滤,不参与打分must:[] ...
- 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...
- 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理
第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...
随机推荐
- SpringBoot中JPA使用动态SQL查询
https://www.jianshu.com/p/f72d82e90948 可以重点关注方法二,把原生sql传入数据库去查询 好处是:更加灵活坏处是:拼接sql比较痛苦,也容易出问题,比如拼接的sq ...
- css基础-2 div布局
div布局 <html> <head> <title>div布局 </title> <meta charset="utf-8" ...
- Android系统编程入门系列之硬件交互——通信硬件USB
在硬件交互的首篇对设备硬件的分类中,互联通信系列硬件主要用来与其他设备进行数据交互.从本文开始,将重点介绍该系列相关硬件. 互联通信系列硬件 根据硬件的可通信距离,由近及远分为USB.NFC.蓝牙.W ...
- bind 标签
<select id="finduserbylikename" parameterType="string" resultMap="cour ...
- web.xml文件配置模板
直接贴完整代码,当然,spring的核心控制器依赖包需要通过mean提前配置 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.// ...
- 使用 Json Schema 定义 API
本文地址:使用 Json Schema 定义 API 前面我们介绍了 Json Schema 的基本内容,这篇文章我们结合 jsonschema2pojo 工具深入分析如何使用 Json Schema ...
- 为什么char类型输入遇空格会结束,int类型必须要空格才能输出
char类型与int类型输入时的区别: 在C语言的规则中,规定了scanf函数在接收字符串时--遇到空格或回车就认为前面的输入已经完成且有效! 而对于int类型:表示整数,输入时需要用空格隔开,以确认 ...
- leetcode 233. 数字 1 的个数
问题描述 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . 问 ...
- 【刷题-LeetCode】122 Best Time to Buy and Sell Stock II
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
- 判断jquery类库是否加载,如未加载则加载。
本人所有文章使用到的东西均在"渭南电脑维修网"网站中得以实现和应用,还请大家参考. 抄写别人网站的同时,N多不同的网站,势必有N多的css.javascript引用文件都会重复引用 ...