Elasticsearch 基础入门--开发elasticsearch搜索数据篇

elasticsearch 简介

不了解 elasticsearch 的人都以为 Es 只能进行模糊搜索,其实不仅能进行模糊搜索还能进行全匹配搜索。在集群模式 elasticsearch 的搜索把多个节点的数据汇集到一个节点最终显示给调用端,索引数据必须指定_index(database)及 index 下面的 type(table)。

查询 elasticsearch 全部数据

java 查询 elasticsearch 全部数据

1.确保启动 es 服务 2.打开浏览器访问http://127.0.0.1:9200/_plugin/head 查看我们上节课创建的 userInfo。

image.png

在com.syl.es下新建 QueryData1 类

image.png

编写搜索全部数据的函数

复制代码
package com.syl.es;

import java.net.InetAddress;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;

public class QueryData1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //调用搜索全部数据方法
        searchAll();
    }
    /**
     * 搜索全部数据
     */
    public static void searchAll(){
        //索引服务的地址
        String elasticServer= "127.0.0.1";
        //索引服务的端口
        Integer elasticServerPort = 9300;
        Client client=null;
        try{
            //初始化连接
            Settings settings = Settings.settingsBuilder().build();
            client = TransportClient.builder().settings(settings).build()
                     .addTransportAddress(new InetSocketTransportAddress(
                             InetAddress.getByName(elasticServer), elasticServerPort));
            //搜索全部数据
            QueryBuilder  bqb=QueryBuilders.matchAllQuery();
            System.out.println(bqb.toString()+"====================");
            SearchResponse response = client.prepareSearch("user").setTypes("userInfo") //set index set type
                    .setQuery(bqb.toString())
                    .execute()
                    .actionGet();
            SearchHits hits = response.getHits();
            System.out.println(hits.getTotalHits() +" "+ hits.getHits().length);
            for (int i = 0; i < hits.getHits().length; i++) {
                System.out.println("===searchAll()====="+hits.getAt(i).getId()+"-------"
                        + "------"+hits.getAt(i).getSource());
            }
            //关闭连接
            client.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

QueryBuilders.matchAllQuery() 代表查询全部数据。

client.prepareSearch("user").setTypes("userInfo")代表查询 user 索引的 userInfo

type(一个 index 索引下可以有多个 type,所以要指定某个 type)。

setQuery(bqb.toString()) 代表设置查询的条件

以 Java Application 的方式,运行QueryData1.java文件。
查看执行结果

image.png

查询 elasticsearch 部分数据

编写 searchSize 方法

在QueryData1.java,添加函数 searchSize

复制代码
    /**
     * 搜索指定数量数据
     */
    public static void searchSize(){
        //索引服务的地址
        String elasticServer= "127.0.0.1";
        //索引服务的端口
        Integer elasticServerPort = 9300;
        Client client=null;
        try{
            //初始化连接
            Settings settings = Settings.settingsBuilder().build();
            client = TransportClient.builder().settings(settings).build()
                     .addTransportAddress(new InetSocketTransportAddress(
                             InetAddress.getByName(elasticServer), elasticServerPort));
            //搜索数据
            QueryBuilder  bqb=QueryBuilders.matchAllQuery();
            SearchResponse response = client.prepareSearch("user").setTypes("userInfo")
                    .setQuery(bqb.toString())
                    .setFrom(0).setSize(2)//设置条数
                    .execute()
                    .actionGet();
            SearchHits hits = response.getHits();
            System.out.println(hits.getTotalHits() +" "+ hits.getHits().length);
            //打印搜索结果
            for (int i = 0; i < hits.getHits().length; i++) {
                System.out.println("====searchSize()==="+hits.getAt(i).getId()+"------"
                        + "-------"+hits.getAt(i).getSource());
            }
            //关闭连接
            client.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

setFrom(0).setSize(2) 代表从开始查询返回 2 条数据。
修改主函数,调用删除索引函数

注释掉 searchAll() 的调用,增加调用 searchSize()。

复制代码
 public static void main(String[] args) {
        //searchAll();
        searchSize();
    }

运行代码

以 Java Application 的方式,运行QueryData1.java文件。
查看运行结果

image.png

模糊搜索 elasticsearch 数据

编写 searchMatchQuery 方法

在QueryData1.java,添加函数 searchMatchQuery

复制代码
    /**
     * 模糊搜索索引数据
     */
    public static void searchMatchQuery(){
        //索引服务的地址
        String elasticServer= "127.0.0.1";
        //索引服务的端口
        Integer elasticServerPort = 9300;
        Client client=null;
        try{
            //初始化连接
            Settings settings = Settings.settingsBuilder().build();
            client = TransportClient.builder().settings(settings).build()
                     .addTransportAddress(new InetSocketTransportAddress(
                             InetAddress.getByName(elasticServer), elasticServerPort));
            //设置查询条件
            BoolQueryBuilder bqb=QueryBuilders.boolQuery();
            float BOOST = (float) 1.2;
            MatchQueryBuilder titleSearchBuilder = QueryBuilders.matchQuery("name", "张中国");
            titleSearchBuilder.boost(BOOST);
            titleSearchBuilder.operator(Operator.AND);
            bqb.must(titleSearchBuilder);
            //模糊搜索数据
            SearchResponse response = client.prepareSearch("user").setTypes("userInfo")
                    .setQuery(bqb.toString())
                    .setFrom(0).setSize(60).setExplain(true) //setExplain 按查询匹配度排序
                    .execute()
                    .actionGet();
            SearchHits hits = response.getHits();
            System.out.println(hits.getTotalHits() +" "+ hits.getHits().length);
            //打印搜索结果
            for (int i = 0; i < hits.getHits().length; i++) {
                System.out.println("===searchMatchQuery()==="+hits.getAt(i).getId()+"--" +
                        "-----------"+hits.getAt(i).getSource());
            }
            //关闭连接
            client.close();
        }catch (Exception e) {
            e.printStackTrace();
        }

    }
}

修改主函数,调用删除索引函数

注释掉 searchSize()的调用,增加调用 searchMatchQuery。

复制代码
 public static void main(String[] args) {
        //搜索全部数据
        //searchAll();
        //搜索指定数量数据
        //searchSize();
        //模糊搜索
          searchMatchQuery();
    }

运行代码

以 Java Application 的方式,运行QueryData1.java文件。
查看运行结果

image.png

运行发现 3 条数据都查询出来了。

拓展:大家可以把搜索关键词换成中国试试能否搜索出来,在换成中看能否搜索出来。

相关推荐
Promise微笑36 分钟前
2026年中国驱鸟器市场格局与主流品牌技术
大数据·人工智能
幽络源小助理2 小时前
最新知识付费系统网站源码 PC+H5双端 附安装教程 – 幽络源源码网
大数据·数据库
luweis2 小时前
企智孪生 ETA(3.3 认知算法层:ETA 的思维内核 3.4 基础架构:算力与弹性)【浙江联保网络 卢伟舜】
大数据·运维·线性代数·ai·矩阵·学习方法
暴躁小师兄数据学院4 小时前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
2601_959986245 小时前
M4Markets:把工具可用性做到位——逻辑梳理与提示整理
大数据·人工智能
薛定猫AI6 小时前
Codex 与 Claude Code 安装配置完全指南
大数据·人工智能·架构
SelectDB6 小时前
从 Machine-Readable 到 Agent-Ready:面向智能体的数据库接口演进
大数据·数据库·agent
前沿AI6 小时前
AI营销服一体化方案亮相2026中国汽车经销商大会,助力汽车销售全链路提效
大数据·人工智能·汽车
KaMeidebaby7 小时前
卡梅德生物技术快报|peg 修饰调控 MXene/WS2 异质结,氨气传感器制备与机理研究
大数据·前端·人工智能·架构·spark·新浪微博
ydyd202604217 小时前
设备管理应用推荐2026深度测评!
大数据·人工智能·机器学习