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

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

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。简称es, 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用。
使用Elasticsearch7.10.2新版本,新手需要注意的那些事_第1张图片
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

一 简单和复杂搜索(Kibana)

使用Elasticsearch7.10.2新版本,新手需要注意的那些事_第2张图片

  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 使用分词器(先分析文档,然后在进行查询)

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

  1. 高亮查询
GET kuangsheng/user/_search
{
     
  "query": {
     
    "match": {
     
      "name": "张三"
    }
  },
  "highlight": {
          //自定义样式 如:"pre_tags":"

" "post_tags":"

"
"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" : [
            ""
          ]
        }
      }
    ]
  }
}

二 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. elasticsearch jar包中对update,get,search,delete等都封装了一系列方法

使用Elasticsearch7.10.2新版本,新手需要注意的那些事_第3张图片

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

你可能感兴趣的:(大数据技术站,elasticsearch,搜索引擎,es)