easy-es使用详解与源码解析

这篇具有很好参考价值的文章主要介绍了easy-es使用详解与源码解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.git clone后,easy-es-core中的pom中需要引入:

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.12</version>
        </dependency>

2.easy-es-sample 中提供了基本案例,可以用来解析源码。

3.easy-es-common中的pom里可以看到,它是基于elasticsearch-rest-high-level-client的。

如果不熟悉elasticsearch-rest-high-level-client,建议先熟悉一下。

1. DSL语句

1.1 DSL常见的查询分类

查询所有:match_all (一般也就是测试用用)

全文检索:利用分词器对用户输入的内容进行分词后进行匹配查询

match_query,multi_match_query

精确查询:根据精确词条值查找数据,主要字段类型为keyword,日期,数值,布尔等
ids,range,term

地理(geo)查询:根据经纬度查询。
geo_distance,geo_bounding_box

复合查询:将上述查询条件组合起来,合并查询条件

bool,function_score

1.2 全文检索

对用户输入的内容进行分词后进行匹配查询

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

GET /easyes_document/_search
{
  "query": {
    "match": {
      "title": "老王"
    }
  }
}

GET /easyes_document/_search
{
  "query": {
    "multi_match": {
      "query": "老王",
      "fields": ["content","creator"]
    }
  }
}

1.3 精确检索

根据精确词条值查找数据,主要字段类型为keyword,日期,数值,布尔等,不会对用户输入的内容进行分词

term:根据词条精确值查询
range:根据值的范围查询

#term 的使用

GET /easyes_document/_search
{
  "query": {
    "term": {
      "_id": {
        "value": "3"
      }
    }
  }
}

GET /easyes_document/_search
{
  "query": {
    "range": {
      "star_num": {
        "gte": 20
      }
    }
  }
}

GET /easyes_document/_search
{
  "query": {
    "range": {
      "star_num": {
        "lte": 5
      }
    }
  }
}

GET /easyes_document/_search
{
  "query": {
    "range": {
      "gmt_create": {
        "lte": "2023-06-18 07:38:43"
      }
    }
  }
}

1.4地理坐标查询

如果没有提示需要硬写:

GET /easyes_document/_search
{
  "query": {
    "geo_distance": {
      "location": "40.13,116.63",
      "distance": "2km"
    }
  }
}

1.5 function score query改变权重影响得分

easy-es使用详解与源码解析

 term默认对keyword中文无效,需要field.keyword才可以。

#function score query
GET /easyes_document/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "title": "老王"
        } 
      },
      "functions": [
        {
          "filter": { 
            "term": {
              "sub_title.keyword": "小毛子"
            }
          },
          "weight":100
        }
      ]
    }
  }
}

1.6 复合查询booleanQuery

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:

  • must:必须匹配每个子查询,类似“与”
  • should:选择性匹配子查询,类似“或”【应该】
  • must_not:必须不匹配,不参与算分,类似“非”
  • filter:必须匹配,不参与算分

找汉子,把地理位置写在must中和放在filter中得分是不一样的

#bool query
GET /easyes_document/_search
{
  "query": {
    "bool": {
      	"must": [
      		{
            "match": {"title" : "测试"}
      		},
      		{
      		  "match": {"creator" : "老汉"}
      		},
      		{
    	      "geo_distance": {
              "geo_location": "POINT (34.400544 73.53028599999999)",
              "distance": "500km"
            }
    	    }
    	  ],
    	  "must_not": [
    	    {
    	      "range": {
    	        "star_num": {
    	          "gte": 10,
    	          "lte": 20
    	        }
    	      }
    	    }
    	  ]
    }
  }
}
#bool query
GET /easyes_document/_search
{
  "query": {
    "bool": {
      	"must": [
      		{
            "match": {"title" : "测试"}
      		},
      		{
      		  "match": {"creator" : "老汉"}
      		}
    	  ],
    	  "must_not": [
    	    {
    	      "range": {
    	        "star_num": {
    	          "gte": 10,
    	          "lte": 20
    	        }
    	      }
    	    }
    	  ],
    	  "filter": [
    	    {
    	      "geo_distance": {
              "geo_location": "POINT (34.400544 73.53028599999999)",
              "distance": "500km"
            }
    	    }
    	  ]
    }
  }
}

1.7 sort排序

sort集合,写在前面的起主要作用文章来源地址https://www.toymoban.com/news/detail-489439.html

#sort
GET /easyes_document/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "title": "老王"
        } 
      },
      "functions": [
        {
          "filter": { 
            "term": {
              "sub_title.keyword": "小毛子"
            }
          },
          "weight":100
        }
      ]
    }
  },
  "sort": [
 
    {"star_num": "asc"},
    {"_score" : "desc"}
  ]
}

1.8 分页

GET /easyes_document/_search
{
  "query": {
    "match": {
      "title": "测试"
    }
  },
  "sort": [
    {
      "star_num": {
        "order": "desc"
      }
    }
  ],
  "from": 10, 
  "size": 10
}

到了这里,关于easy-es使用详解与源码解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot整合Easy-Es

    Springboot 2.7.5 JDK 17 Elasticsearch 7.14.0 Easy-Es 1.1.1 《点我进入Easy-Es官网》 PS:目前Easy-Es暂不支持SpringBoot3.X 《安装Elasticsearch教程》 pom.xml application.yml Document实体类 DocumentMapper (官方建议:Easy-Es的Mapper和MyBatis-Plus分开存放) 和MyBatis-Plus差不多都是继承mapper,但是Easy-Es不需要继承Se

    2024年02月10日
    浏览(11)
  • ES商品搜索实战 Easy-Es搭配原生SearchSourceBuilder

    组装查询条件LambdaEsQueryWrapper,包含查询条件,排序,分页,高亮,去重 这里是搜索的条件组装,封装BoolQueryBuilder 这里就是方法的入口,productMapper.selectList(wrapper)和Mybatis-Plus的写法基本上一摸一样,如果不懂可以去看一下EE官方使用方法 Easy-Es

    2024年02月17日
    浏览(12)
  • SpringBoot整合Easy-ES操作演示文档

    1.1 官网 Easy-ES官网: https://www.easy-es.cn/ 官方示例: https://gitee.com/dromara/easy-es/tree/master/easy-es-sample 参考链接: https://blog.51cto.com/yueshushu/6193710 1.2 主要特性 **零侵入:**针对ES官方提供的RestHighLevelClient只做增强不做改变,引入EE不会对现有工程产生影响,使用体验如丝般顺滑。 *

    2024年02月07日
    浏览(14)
  • 若依整合Easy-Es实现文章列表分页查询

    Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,在有些方面甚至比M

    2024年01月16日
    浏览(16)
  • springboot整合easy-es实现数据的增删改查

    背景 目前公司的一个老项目,查询贼慢,需要想办法提升一下速度,于是就想到了ES,现在尝试一下将ES整合到项目中来提升检索效率。 ES是基于倒排索引实现的,倒排索引中一个表相当于一个索引,表中的每条记录都是一个文档(JSON数据),系统会先对字段数据进行分词,

    2024年01月20日
    浏览(17)
  • Easy-Es框架实践测试整理 基于ElasticSearch的ORM框架

    Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生。EE是Mybatis-Plus的Es平替版,在有些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场

    2024年01月16日
    浏览(13)
  • 关于这款开源的ES的ORM框架-Easy-Es适合初学者入手不?

    最近笔者为了捡回以前自学的ES知识,准备重新对ES的一些基础使用做个大致学习总结。然后在摸鱼逛开源社区时无意中发现了一款不错的ElasticSearch插件-Easy-ES,可称之为“ES界的MyBatis-Plus”。联想到之前每次用RestHighLevelClient写一些DSL操作时都很麻烦(复杂点的搜索代码量确实

    2024年02月07日
    浏览(18)
  • 【别再做XX外卖啦!和我从零到1编写Mini版Easy-ES】完成一个Mapper模型

    作者:沈自在 代码仓库:https://gitee.com/tian-haoran/mini-easy-es 本节教程分支:https://gitee.com/tian-haoran/mini-easy-es/tree/course_02_create_mapper/ ⚠️注意:本项目会持续更新,直到功能完善 1.1.1 什么是 FactoryBean接口? 很多同学都知道 BeanFactory 接口,这个是大名鼎鼎的Spring中的核心接口,

    2024年02月04日
    浏览(15)
  • 运用easy-es保存数据时,报错:cn.easyes.common.exception.EasyEsException: no such method:

    cn.easyes.common.exception.EasyEsException: no such method:     at cn.easyes.common.utils.ExceptionUtils.eee(ExceptionUtils.java:39)     at cn.easyes.core.cache.BaseCache.lambda$setterMethod$6(BaseCache.java:127)     at cn.easyes.core.cache.BaseCache$$Lambda$2307/809171830.get(Unknown Source)     at java.util.Optional.orElseThrow(Optional.java:29

    2024年02月03日
    浏览(12)
  • 1.00001git源码clone后进行编译(带调试)

    – 新建用户 – 用户加入sude组 先cd到/etc/sudoers目录下 由于sudoers文件为只读权限,所以需要添加写入权限,chmod u+w sudoers vim sudoers 找到root ALL = (ALL) ALL这一行,在下一行加入username ALL = (ALL) ALL。username指代你想加入sudo组的用户名。 把sudoers文件的权限修改回来。chmod u-w sudoers

    2024年02月11日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包