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 条数据都查询出来了。

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

相关推荐
Makoto_Kimur几秒前
Elasticsearch面试八股整理
elasticsearch
RFID科技的魅力7 分钟前
CP300R触屏RFID打印机实测:稳定输出超可靠
大数据·物联网·rfid
꧁꫞静芽꫞꧂3 小时前
【FISHER 阀门定位器工作原理、保养维护与故障处理全指南】
大数据
TDengine (老段)4 小时前
TDengine IDMP 可视化 —— 面板
大数据·数据库·人工智能·物联网·ai·时序数据库·tdengine
newsxun4 小时前
中创汇联双城峰会圆满举办 多维赋能实体高质量发展
大数据·人工智能
HcreateLabelView5 小时前
引领RFID电子标签打印新时代,打造标识打印系统新标杆
大数据·人工智能
数智化管理手记5 小时前
精益生产合理化建议核心解读:本质、价值与提报规范
大数据·网络·人工智能·低代码·制造
LaughingZhu6 小时前
移动端 AI 的价值重估:设备端智能的拐点
大数据·人工智能·经验分享·搜索引擎·语音识别
@insist1237 小时前
网络工程师-WLAN 无线局域网全解析
大数据·网络·网络工程师·软考·软件水平考试
airuike1238 小时前
以微见著,精准护航:MEMS IMU助力高铁轨道智能检测
大数据·人工智能·科技