Elasticsearch的使用RestHighLevelClient

目录

一、准备

1.1、依赖

1.2、测试数据

二、案例

2.1、全文搜索

2.1.1、匹配搜索(会拆词)

2.1.2、短语搜索

2.1.3、queryString搜索

2.1.4、多字段匹配搜索

2.2、词条级搜索

2.2.1、词条级搜索

2.2.2、词条集合搜索(terms query)

2.2.3、范围搜索( range query)

2.2.4、不为空搜索(exists query)

2.2.5、词项前缀搜索(prefix query)

2.2.6、通配符搜索(wildcard query)

2.2.7、正则搜索

2.2.8、模糊搜索(fuzzy query)

2.2.9、 ids搜索(id集合查询)(ids query)

2.3、复合查询

2.3.1、排序

三、分词器

3.1、不设置分词器,使用默认分词器

3.2、指定分词器,使用IK最大分词 

3.3、指定分词器,使用IK最小分词


一、准备

1.1、依赖

<elasticsearch.version>7.12.1</elasticsearch.version>

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>${elasticsearch.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

1.2、测试数据

PUT /yuangong 
{
    "settings": {},
    "mappings": {
        "properties": {
            "name": {
                "type": "text",
                "analyzer": "ik_max_word"
            },
            "alias": {
                "type": "text"
            },
            "age": {
                "type": "integer"
            },
            "sex": {
                "type": "keyword"
            },
            "phone": {
                "type": "text"
            },
            "title": {
                "type": "text",
                "analyzer": "ik_max_word"
            },
            "slogan": {
                "type": "text"
            }
        }
    }
}


POST /yuangong/_doc/
{
    "name": "张三三",
    "alias": "小张",
    "age": 28,
    "sex": "男",
    "phone": 183xxxx0000,
    "title": "初级Java开发",
    "slogan": "苟富贵,勿相忘"
}

POST /yuangong/_doc/
{
    "name": "李四",
    "alias": "小四",
    "age": 25,
    "sex": "男",
    "phone": 183xxxx0001,
    "title": "高级Java开发",
    "slogan": "行路难,行路难,多歧路,今安在"
}

POST /yuangong/_doc/
{
    "name": "王五",
    "alias": "五哥",
    "age": 30,
    "sex": "男",
    "phone": 183xxxxx0002,
    "title": "资深Java开发",
    "slogan": "逾期感慨路难行,不如马上出发"
}

POST /yuangong/_doc/
{
    "name": "王六",
    "alias": "名与",
    "age": 28,
    "sex": "男",
    "phone": 183xxxx0003,
    "title": "高级前端开发",
    "slogan": "超越自己"
}

POST /yuangong/_doc/
{
    "name": "王狗蛋",
    "alias": "狗蛋",
    "age": 31,
    "sex": "男",
    "phone": 183xxxx0004,
    "title": "高级产品经理",
    "slogan": "明哲保身"
}

POST /yuangong/_doc/
{
    "name": "王麻子",
    "alias": "逍遥子",
    "age": 30,
    "sex": "女",
    "phone": 183xxxx0005,
    "title": "资深业务专家",
    "slogan": "鹏之大不知其几千里也"
}

POST /yuangong/_doc/
{
    "name": "周二",
    "alias": "二子",
    "age": 22,
    "sex": "男",
    "phone": 18300000006,
    "title": "初级测试开发",
    "slogan": "冷冷的冰雨在我脸上胡乱的拍"
}

二、案例

2.1、全文搜索

2.1.1、匹配搜索(会拆词)

和数据类型有关

(1)如果被查询的字段是keywork,查询的时候只能全量匹配,不会被拆分

(2)如果查询字段类型是text,查询的值会根据查询字段的分词器进行分词

如:如果没有设置分词器,张三三会拆成张、三、三,匹配出包含【张】或者【三】或者【三】的数据

如:如果设置IK分词器,

"name": {"type": "text","analyzer": "ik_max_word"}

张三三会拆成张三、三三,匹配出包含【张三】或者【三三】的数据

如:如果设置IK分词器,三三会拆成三三,匹配出包含【三三】的数据

(3)上面使用的是默认的operator默认OR, 设置operator为AND的时候

如:如果没有设置分词器,张三三会拆成张、三、三,匹配出包含【张】并且【三】并且【三】的数据

如:如果设置IK分词器,张三三会拆成张三、三三,匹配出包含【张三】并且【三三】的数据

如:如果设置IK分词器,三三会拆成三三,匹配出包含【三三】的数据

public void matchQuery() throws IOException {
    //  搜索请求对象
    SearchRequest searchRequest = new SearchRequest("yuangong");
    //  搜索源构建对象
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "三三").operator(Operator.OR);
    doSearch(searchRequest,sea
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值