使用Elasticsearch7.10.2新版本,新手需要注意的那些事

Posted JF Coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Elasticsearch7.10.2新版本,新手需要注意的那些事相关的知识,希望对你有一定的参考价值。

使用Elasticsearch,新手需要注意的那些事

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。简称es, 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用。

底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elasticsearch 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
Elasticsearch是一个实时的分布式开放源代码全文本搜索和分析引擎。可从RESTful Web服务界面访问它,并使用无模式的JSON(javascript对象表示法)文档存储数据。它基于Java编程语言构建,因此Elasticsearch可以在不同平台上运行。它使用户能够以很高的速度浏览大量数据。

一 简单和复杂搜索(Kibana)

  1. GET demo/user/_search?q=name:张三 //使用Kibana测试查询
    
  2. GET demo/user/_search
    
      "query":        //复杂查询,排序,分页,高亮
        "match": 
          "name": "张三"
        
      
          
    
  3. GET demo/user/_search
    
     "query": 
        "match": 
          "name": "张三"
        
      ,
      "_source": ["name","tag"] //结果过滤
    
    
  4. "sort": [
        
          "age": 
            "order": "asc"
          
                //排序
      ]
    
  5.   "sort": [
        
          "age": 
            "order": "asc"
          
                
      ],
      "from": 0
      , "size": 20         //查询条数
    
    
  6. GET kuangsheng/user/_search  //多条件查询
    
      "query": 
        "bool": 
          "must": [  //"shoud"//相当于or "must_not"相当于not
            
              "match": 
                "name": "李四"
              
            ,
            
            "match": 
                "age": "25"
              
            
          ]
           
      
    
    
  7.  "filter":     //过滤查询
            "range":
              "age":
                "lt":23  //"gt"大于 "gte"大于等于 "lte"小于等于
              
            
          
    
  8. 精确查询

  • term 直接查询(精确),是代表完全匹配

  • match 使用分词器(先分析文档,然后在进行查询)


"query":
"term" : 
"price" : 100

通常当查找一个精确值的时候,我们不希望对查询进行评分计算。只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。最终组合的结果是一个 constant_score 查询,它包含一个 term 查询:

GET /demo/users/_search

"query":
"constant_score": //我们用constant_score将term查询转化为过滤器
"filter":
"term" :  //我们之前看到过的term查询
"price" : 100

最简单的一个match例子:
查询和"张三"这个查询语句匹配的文档。


  "query": 
    "match": 
        "content" : 
            "query" : "张三"
        
    
  

注意 text keyword类型不会被分词器解析

  1. 高亮查询
GET kuangsheng/user/_search

  "query": 
    "match": 
      "name": "张三"
    
  ,
  "highlight":      //自定义样式 如:"pre_tags":"<p>" "post_tags":"</p>"
    "fields": 
      "name": //name类型高亮
    
  

设置高亮后的elasticsearch返回值


  "took" : 43,
  "timed_out" : false,
  "_shards" : 
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  ,
  "hits" : 
    "total" : 
      "value" : 1,
      "relation" : "eq"
    ,
    "max_score" : 2.5226097,
    "hits" : [
      
        "_index" : "kuangsheng",
        "_type" : "user",
        "_id" : "2",
        "_score" : 2.5226097,
        "_source" : 
          "name" : "张三",
          "age" : "25",
          "desc" : "gggg",
          "tag" : "渣男"
        ,
        "highlight" : 
          "name" : [
            "<em>张</em><em>三</em>"  //高亮默认标签
          ]
        
      
    ]
  

二 SpringBoot集成Elasticsearch

  1. 导入
<dependency>
    <groupId>org.elasticsearch.client </groupId> 
    <artifactId >elasticsearch-rest-high-level-client</artifactId> 
    <version>7.12.0</version> 
</dependency>

官方文档:https://www.elastic.co/guide/en/elasticsearch/client/

  1. 配置连接客户端的地址
@Configuration
public class ElasticSearchClintConfig 

    @Bean
    public RestHighLevelClient restHighLevelClient() 
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    

  1. 测试
	@Autowired
	@Qualifier("restHighLevelClient")
	private RestHighLevelClient client;
		
    @Test //测试索引创建
	void testCreateIndex() throws IOException 
		CreateIndexRequest request = new CreateIndexRequest("kuang_index");
		CreateIndexResponse createIndexResponse = client.indices().create(request,           RequestOptions.DEFAULT);
		System.out.println(createIndexResponse);
	
  1. 添加文档
    @Test
    void into() throws IOException 
        //创建对象
        User user = new User("张三", 33);
        //创建请求
        IndexRequest request = new IndexRequest("kuang_index");
        //设置规则
        request.id("1").timeout("1s");
        //将数据放入请求
        request.source(JSON.toJSONString(user), XContentType.JSON);
        //发送请求,获取响应结果
        IndexResponse index = client.index(request, RequestOptions.DEFAULT);
        System.out.println(index.toString());
    
  1. 获取文档
@Test
    void getDocument() throws IOException 
        GetRequest request = new GetRequest("kuang_index", "1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString());
        System.out.println(response);
    
  1. elasticsearch jar包中对update,get,search,delete等都封装了一系列方法

推荐狂神说的Elasticsearch教程:www.kuangstudy.com

以上是关于使用Elasticsearch7.10.2新版本,新手需要注意的那些事的主要内容,如果未能解决你的问题,请参考以下文章

torch下不了新版本默认

安卓手机app如何旧版本覆盖新版本,不用卸载且不删数据?

任何新版本的 tf.placeholder?

如何使用 twine 将新版本的项目上传到 PyPI?

iOS 7 用户无法安装新版本

带有 rstudio 的新版本 R