ElasticSearch入门小demo

 1. 创建Maven工程,引入ElasticSearch坐标

导入坐标

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

<groupId>com.itheima</groupId>
<artifactId>elasticsearch_demo</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>5.6.8</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>5.6.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>2.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.24</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
    </dependency>
</dependencies>

1.1.1. 新建索引+添加文档-方式1(map)
使用创建索引(index)+类型(type)+自动创建映射(Elasticsearch帮助我们根据存储的字段自动建立映射,后续讲完分词器后,手动建立映射)

步骤:

/*1.创建客户端访问对象-TransportClient/

//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)

//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)

//4.准备索引-client.prepareIndex(索引名,类型名,文档id)

//5.准备数据(域与映射)-indexRequestBuilder.setSource(map)

//6.执行保存索引与文档-indexRequestBuilder.get()

//7.输出执行结果-response.sout()

//8.关闭客户端-client.close()

创建包,com.itheima.es.test,创建类TestElasticSearch.java

public class TestElasticsearch {

@Test
//创建索引
public void testCreateIndex() throws Exception{
    /**
     * 1.创建客户端访问对象-TransportClient
     * Settings表示集群的设置
     * Settings.EMPTY:表示没有集群的配置(单节点)
     * Settings.builder().build():表示连接的是集群环境(多节点)
     */
    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
    //2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
    InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300);
    //3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
    client.addTransportAddress(address);
    //4.准备索引-client.prepareIndex(索引名,类型名,文档id)
    IndexRequestBuilder indexRequestBuilder = client.prepareIndex("blog", "article", "1");
    //5.准备数据(域与映射)-indexRequestBuilder.setSource(map)
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("id", 1);
    map.put("title", "什么是Elasticsearch?");
    map.put("content", "ElasticSearch是一个基于Lucene的搜索服务器");
    indexRequestBuilder.setSource(map);
    //6.执行保存索引与文档-indexRequestBuilder.get()
    IndexResponse response = indexRequestBuilder.get();
    //7.输出执行结果-response.sout()
    System.out.println(response);
    //8.关闭客户端-client.close()
    client.close();
}

}
如果创建索引的时候,插入数据过慢,可以在elasticsearch服务器的上方点击右键->属性,将“快速编辑模式”的复选框的对勾去掉。(一般是设置es内存太小才会慢)

1.1.2. head插件查看索引信息
http://localhost:9100

查看数据

1.1.3. Article文章信息在es中存储的内容

1.1.4. (推荐)新建索引+添加文档-方式2(XContentBuilder)
在原有添加索引代码基础上修改第4步准备索引与第5步准备数据(域与映射)

@Test
//创建索引
public void testCreateIndex() throws Exception{
/**
* 1.创建客户端访问对象-TransportClient
* Settings表示集群的设置
* Settings.EMPTY:表示没有集群的配置(单节点)
* Settings.builder().build():表示连接的是集群环境(多节点)
*/
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”), 9300);
//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
client.addTransportAddress(address);

//方式1:map
//4.准备索引-client.prepareIndex(索引名,类型名,文档id)
/*IndexRequestBuilder indexRequestBuilder = client.prepareIndex("blog", "article", "1");
//5.准备数据(域与映射)-indexRequestBuilder.setSource(map)
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 1);
map.put("title", "什么是Elasticsearch?");
map.put("content", "ElasticSearch是一个基于Lucene的搜索服务器");
indexRequestBuilder.setSource(map);*/

//方式2:XContentBuilder(推荐)
//4.准备索引-client.prepareIndex(索引名,类型名,文档id)
IndexRequestBuilder indexRequestBuilder = client.prepareIndex("blog", "article", "2");
XContentBuilder builder = XContentFactory.jsonBuilder()
        .startObject()  //{
            .field("id",2)
            .field("title","2什么是Elasticsearch")
            .field("content","2ElasticSearch是一个基于Lucene的搜索服务器")
        .endObject(); //}
indexRequestBuilder.setSource(builder);

//6.执行保存索引与文档-indexRequestBuilder.get()
IndexResponse response = indexRequestBuilder.get();
//7.输出执行结果-response.sout()
System.out.println(response);
//8.关闭客户端-client.close()
client.close();

}

1.2. 搜索文档数据
1.2.1. ID查询(不走索引)
//根据文档id查询
@Test
public void testGetById() throws Exception{
/**
* 1.创建客户端访问对象-TransportClient
* Settings表示集群的设置
* Settings.EMPTY:表示没有集群的配置(单节点)
* Settings.builder().build():表示连接的是集群环境(多节点)
*/
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”), 9300);
//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
client.addTransportAddress(address);
//查询
GetResponse response = client.prepareGet(“blog”, “article”, “1”).get();
//7.输出执行结果-response.sout()
System.out.println("文章json: " + response.getSourceAsString());
System.out.println(“获取title:” + response.getSource().get(“title”));
//8.关闭客户端-client.close()
client.close();
}

1.2.2. 查询全部(不走索引)
//查询所有
@Test
public void testGetAll() throws Exception{
//1.创建客户端访问对象-TransportClient
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”), 9300);
//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
client.addTransportAddress(address);

//查询所有
SearchResponse response = client.prepareSearch("blog").setTypes("article")
        .setQuery(QueryBuilders.matchAllQuery()).get();
//7.输出执行结果-response.sout()
SearchHits hits = response.getHits();
System.out.println("总记录数:" + hits.getTotalHits());
for (SearchHit hit : hits.getHits()) {
    System.out.println("文章json: " + hit.getSourceAsString());
    System.out.println("获取title:" + hit.getSource().get("title"));
    System.out.println("-------------------------------------------------");
}
//8.关闭客户端-client.close()
client.close();

}

1.2.3. 字符串查询(条件分词)
//字符串查询
@Test
public void testGetByString() throws Exception{
//1.创建客户端访问对象-TransportClient
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”), 9300);
//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
client.addTransportAddress(address);
//查询所有
SearchResponse response = client.prepareSearch(“blog”).setTypes(“article”)
/*QueryBuilders.queryStringQuery(“搜索”)默认匹配所有域
* 如果如果添加.field(“content”):表示只在content字段进行搜索
* */
.setQuery(QueryBuilders.queryStringQuery(“搜索”).field(“content”)).get();
//7.输出执行结果-response.sout()
SearchHits hits = response.getHits();
System.out.println(“总记录数:” + hits.getTotalHits());
for (SearchHit hit : hits.getHits()) {
System.out.println(“文章json: " + hit.getSourceAsString());
System.out.println(“获取title:” + hit.getSource().get(“title”));
System.out.println(”-------------------------------------------------");
}
//8.关闭客户端-client.close()
client.close();
}

1.2.4. 词条查询(条件不分词)

//字符串查询
//词条查询
@Test
public void testGetByString() throws Exception{
//1.创建客户端访问对象-TransportClient
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”), 9300);
//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
client.addTransportAddress(address);

//查询所有
SearchResponse response = client.prepareSearch("blog").setTypes("article")
        /*
         * QueryBuilders.queryStringQuery("搜索")默认匹配所有域
         * 如果如果添加.field("content"):表示只在content字段进行搜索
         * */
        //.setQuery(QueryBuilders.queryStringQuery("搜索").field("content")).get();
        .setQuery(QueryBuilders.termQuery("content","搜索")).get();
//7.输出执行结果-response.sout()
SearchHits hits = response.getHits();
System.out.println("总记录数:" + hits.getTotalHits());
for (SearchHit hit : hits.getHits()) {
    System.out.println("文章json: " + hit.getSourceAsString());
    System.out.println("获取title:" + hit.getSource().get("title"));
    System.out.println("-------------------------------------------------");
}
//8.关闭客户端-client.close()
client.close();

}
搜不到结果:为什么?

1.2.5. 模糊查询(通配符查询)
*:表示所有的任意的多个字符组成
?:表示1个任意的字符
//模糊查询(通配符查询)
@Test
public void testWildcardQuery() throws Exception{
//1.创建客户端访问对象-TransportClient
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);
//2.创建Elasticsearch连接对象-new InetSocketTransportAddress(InetAddress.getByName(地址), 端口号)
InetSocketTransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”), 9300);
//3.指定Elasticsearch连接地址与端口-client.addTransportAddress(address)
client.addTransportAddress(address);

//查询所有
SearchResponse response = client.prepareSearch("blog").setTypes("article")
        /*
         * "*":表示所有的任意的多个字符组成
         * "?":表示1个任意的字符
         * */
        .setQuery(QueryBuilders.wildcardQuery("content","*?*")).get();
//7.输出执行结果-response.sout()
SearchHits hits = response.getHits();
System.out.println("总记录数:" + hits.getTotalHits());
for (SearchHit hit : hits.getHits()) {
    System.out.println("文章json: " + hit.getSourceAsString());
    System.out.println("获取title:" + hit.getSource().get("title"));
    System.out.println("-------------------------------------------------");
}
//8.关闭客户端-client.close()
client.close();

}

1.2.6. 【总结】
词条: 就是将文本内容存入搜索服务器,搜索服务器进行分词之后的最小的词(不能再切分)

例如:“ElasticSearch是一个基于Lucene的搜索服务器”

分词(好的): ElasticSearch、是、一个、基于、Lucene、搜索、服务、服务器

默认单字分词(差的): ElasticSearch、 是、一、个、基、于、搜、索、服、务、器

为什么刚才我们使用的QueryStringQuery能搜到数据呢?搜索“全文” 能够查询到,这是为什么呢?看图:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ElasticSearch是一个开源的分布式搜索引擎,基于Lucene库。它可以快速地存储、搜索和分析大量的数据。ElasticSearch被广泛用于日志分析、全文搜索、安全分析和商业智能等领域。 以下是ElasticSearch入门指南: 1. 安装ElasticSearch:你可以从ElasticSearch官网下载并安装ElasticSearch。根据你的操作系统选择相应的版本。 2. 启动ElasticSearch:启动ElasticSearch非常简单。只需在终端中运行elasticsearch命令即可。 3. 探索ElasticSearch:通过在浏览器中输入http://localhost:9200/,可以访问ElasticSearch的REST API,并能看到ElasticSearch的基本信息。 4. 创建索引:在ElasticSearch中,数据被存储在索引中。你可以通过发送PUT请求来创建一个新的索引。例如,你可以使用以下命令来创建一个名为“my_index”的新索引: ``` PUT /my_index { "settings": { "number_of_shards": 1, "number_of_replicas": 0 } } ``` 5. 添加文档:在ElasticSearch中,文档是指一个JSON对象。你可以使用以下命令将文档添加到“my_index”索引中: ``` PUT /my_index/_doc/1 { "title": "Elasticsearch入门", "author": "John", "content": "Elasticsearch是一个开源的分布式搜索引擎" } ``` 6. 搜索文档:你可以使用以下命令来搜索“my_index”索引中的所有文档: ``` GET /my_index/_search ``` 7. 进行查询:你可以使用查询语句来搜索“my_index”索引。例如,你可以使用以下命令来搜索标题包含“Elasticsearch”的所有文档: ``` GET /my_index/_search { "query": { "match": { "title": "Elasticsearch" } } } ``` 这就是ElasticSearch入门指南。对于更深入的学习,你可以查看ElasticSearch官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值