es操作

一、索引库管理

1、创建索引库

方法:put url:http://192.168.68.129:9200/{index}

分片数:默认索引库需要分片的,所有片加起来才是一个完整的索引库。每个分片中保存的内容是不同的。分片一经设定无法修改。es6及之前的版本默认是5个分片,ES7中默认是一个分片。 副本数:如果是1代表给每个分片创建一个副本。起到备份以及负载均衡的作用。后期可以修改。 主分片和副本分片一定是分散到不同的节点上存储。

集群健康值:绿色:健康, 所有分片成功分配黄色:亚健康, 集群可用,但是存在风险,有副本分片未成功分配红色:集群不可用, 分片不完整的状态。

2、删除索引库

方法:delete url:http://192.168.68.129:9200/{index}

3、设置mapping

1)创建索引库时设置mappingES6:

方法:put url:http://192.168.68.129:9200/{index} 请求体:

{
    "mappings":{
         "myblog":{
              "properties":{
                   "id":{
                        "type":"integer",
                        "store":true
                   },
                    "title":{
                        "type":"text",
                        "store":true

                   },
                    "content":{
                        "type":"text",
                        "store":true
                   },
                    "tag":{
                        "type":"keyword"
                   }
              }
         }
    }
}

-- 在ES6中可以设置type的名称,但是ES6中只允许定义一个Type -- 在ES7中是不可以定义type,已经把type概念删除了。

查找mappingd的url:http://192.168.68.129:9200/{index}/_mapping 返回体:

{
    "properties":{
        "id":{
            "type":"integer",
            "store":true
        },
        "title":{
            "type":"text",
            "store":true
        },
        "content":{
            "type":"text",
            "store":true
        },
        "tag":{
            "type":"keyword"
        }
    }
}

 

二、文档的管理

1、添加文档

方法:put, url:/{index}/{type}/{_id}  请求体:

{
    "id":1,
    "title":"elasticsearch是什么",
    "content":"elasticsearch是一个全文检索引擎",
    "tag":"es"
}

注意:在添加文档之前应该设置好mapping,如果不设置mapping也可以添加文档,es会自动根据文档推断出mapping。自动推断的mapping未必是我们想要的格式。

2、更新文档

方法:put、post 和添加完全相同。只要_id的值保持一致就会把原来的文档删除,然后添加一个新的文档,这就是更新。 更新的本质就是先删除后添加。

3、删除文档

方法:delete  url:/{index}/{type}/{_id}

4、根据_id取文档

方法:get   url:/{index}/{type}/{_id}

 

三、查询表达式

在ES中提供多种形式的Query。 在Lucene中Query是所有查询的父类,是一个抽象类。

1、查询方法

方法:GET、POST  url:/{index}/{type}/_search

请求体:

{
    "query":{
        xxxxx:xxxx --查询条件
    }
}

2、查询全部文档

{
"query":{
  "match_all":{}
    }
}

3、根据term查询

term最基础的查询,不允许分词。必须指定一个索引中存在的关键词才能查询出结果,如果指定的关键词在索引中不存在那么就没有结果。

{
    "query":{
            "term":{
                "name":"java"
            }
    }
}

4、match查询

可以根据一个字符串进行查询,先对查询的内容分词,然后再查询。

{
    "query": {
        "match": {
            "title": "java是什么东西"
        }
    }
}

5 query_string查询

POST localhost:9200/blog1/article/_search

{
    "query": {
        "query_string": {
            "default_field": "title",
            "query": "搜索服务器"
        }
    }
}

6 multi_match查询:

{
    "query": {
        "multi_match": {
            "query": "李四",
            "fields": [
                "name",
                "address"
            ]
        }
    }
}

7、bool查询

组合条件查询,把多个条件组合到一起。多个条件之间可以使用:AND、OR、NOT

must:相当于AND

should:相当于OR

must_not:相当于NOT

filter:过滤查询, 也可以指定多个条件,不同的是filter不需要打分。 

 

四、中文分词器 

ES中默认使用StandardAnalyzer,处理中文就是一个汉字一个关键词。

1)测试分词器的分词效果  get /_analyze

{
  "analyzer":"standard",     
  "text":"处理中文就是一个汉字一个关键词"
}

2)IKAnalyzer

对应每个ES版本都有一个分词器的版本。

提供两个分词算法:

   ik_smart:分词少,速度快

   ik_max_word:分词多,速度慢

3)使用方法

设置mapping是指定使用什么分词器。

mapping一旦设置无法修改。

在创建索引库时设置好mapping。

java api 工程:https://gitee.com/sublun/wuchen-search

 

posted @ 2023-04-13 11:14  小兵要进步  阅读(151)  评论(0编辑  收藏  举报