ElasticSearch Java Api -检索索引库

上篇博客记录了如何用java调用api把数据写入索引,这次记录下如何搜索。

一、准备数据


    String data1 = JsonUtil.model2Json(new Blog(1, "git简介", "2016-06-19", "SVN与Git最主要的区别..."));
        String data2 = JsonUtil.model2Json(new Blog(2, "Java中泛型的介绍与简单使用", "2016-06-19", "学习目标 掌握泛型的产生意义..."));
        String data3 = JsonUtil.model2Json(new Blog(3, "SQL基本操作", "2016-06-19", "基本操作:CRUD ..."));
        String data4 = JsonUtil.model2Json(new Blog(4, "Hibernate框架基础", "2016-06-19", "Hibernate框架基础..."));
        String data5 = JsonUtil.model2Json(new Blog(5, "Git基本知识git", "2016-06-19", "Shell是什么..."));
        String data6 = JsonUtil.model2Json(new Blog(6, "C++基本知识", "2016-06-19", "Shell是什么..."));
        String data7 = JsonUtil.model2Json(new Blog(7, "Mysql基本知识", "2016-06-19", "git是什么..."));

二、查询

一次查询可分为下面四个步骤:

  • 1.创建连接ElasticSearch服务的client.

    索引在ElasticSearch服务器上,进行索引的查询首先要和服务器创建连接,这是第一步。

    Client client = TransportClient.builder().build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    
  • 2.创建QueryBuilder.

    QueryBuilder可以设置单个字段的查询,也可以设置多个字段的查询.

    e.g.1: 查询title字段中包含hibernate关键字的文档:

    QueryBuilder qb1 = termQuery("title", "hibernate");
    

    e.g.2: 查询title字段或content字段中包含git关键字的文档:

    QueryBuilder qb2= QueryBuilders.multiMatchQuery("git", "title","content");
    
  • 3.执行查询

    通过client设置查询的index、type、query.返回一个SearchResponse对象:

    SearchResponse response = client.prepareSearch("blog").setTypes("article").setQuery(qb2).execute()
                .actionGet();
    
  • 4.处理查询结果

    SearchResponse对象的getHits()方法获取查询结果,返回一个SearchHits的集合,遍历集合获取查询的文档信息:

    SearchHits hits = response.getHits();
    

三、java代码实现

package cn.com.bropen.es;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

import static org.elasticsearch.index.query.QueryBuilders.*;

public class ElasticSearchGet {

    public static void main(String[] args) {
        // client startup
        try {
            Client client = TransportClient.builder().build()
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

            QueryBuilder qb1 = termQuery("title", "hibernate");
            QueryBuilder qb2= QueryBuilders.multiMatchQuery("git", "title","content");

            SearchResponse response = client.prepareSearch("blog").setTypes("article").setQuery(qb2).execute()
                    .actionGet();

            SearchHits hits = response.getHits();
            if (hits.totalHits() > 0) {
                for (SearchHit hit : hits) {
                    System.out.println("score:"+hit.getScore()+":\t"+hit.getSource());// .get("title")
                }
            } else {
                System.out.println("搜到0条结果");
            }

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }

}

查询结果:

log4j:WARN No appenders could be found for logger (org.elasticsearch.plugins).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
score:0.5:  {posttime=2016-06-19, id=1, title=git简介, content=SVN与Git最主要的区别...}
score:0.17673586:   {posttime=2016-06-19, id=7, title=Mysql基本知识, content=git是什么...}
score:0.049935166:  {posttime=2016-06-19, id=5, title=Git基本知识git, content=Shell是什么...}

参考资料:

  1. 分布式搜索elasticsearch java API 之(五)——搜索
  2. GET API
  3. elasticsearch中文指南–java-api
时间: 2024-10-05 00:06:37

ElasticSearch Java Api -检索索引库的相关文章

[ElasticSearch]Java API 之 索引管理

ElasticSearch为了便于处理索引管理(Indices administration)请求,提供了 org.elasticsearch.client.IndicesAdminClient接口.通过如下代码从 Client 对象中获得这个接口的实现: IndicesAdminClient indicesAdminClient = client.admin().indices(); IndicesAdminClient定义了好几种prepareXXX()方法作为创建请求的入口点. 1. 索引

ElasticSearch Java Api -创建索引

ElasticSearch JAVA API官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html 一.生成JSON 创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法: 1.1手写方式生成 String json = "{" + "\"user\":\"kimchy\"

ElasticSearch Java Api-删除索引

删除可以是删除整个索引库,也可以根据文档id删除索引库下的文档,还可以通过query查询条件删除所有符合条件的数据. 一.删除整个索引库 下面的例子会删除indexName索引: DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName) .execute().actionGet(); 可以根据DeleteIndexResponse对象的isAcknowledged()方法判断删除是否成功,返

第08章 ElasticSearch Java API

本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理ElasticSearch返回的错误信息. 通过发送各种管理指令来收集集群状态信息或执行管理任务. 8.3 连接到集群 8.3.1 成为ElasticSearch节点 第一种连接到ElasticSearch节点的方式是把应用程序当成ElasticSearch集群中的一个节点. Node node=no

Elasticsearch Java API (二): index创建删除 cluster管理

Elasticsearch Java API (二): index创建删除 cluster管理  elastic官网有权威的java api 英文的 需要耐心看 这里整理下基本操作 创建maven工程添加依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.2.2</ver

独孤九剑之Elasticsearch Java API破剑式

0.题记之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要在海量的数据中找到和自己相关的业务数据,实现对已有的数据实现全文检索.分类统计等功能并应用到业务系统中,必须借助Java API来实现. 1.Elasticsearch Java API 概览Elasticsearch Java API 相关使用研究结果: 1.1 国内的博文讲解Elasticsear

Elasticsearch之curl创建索引库和索引时注意事项

前提, Elasticsearch之curl创建索引库 Elasticsearch之curl创建索引 注意事项 1.索引库名称必须要全部小写,不能以下划线开头,也不能包含逗号 2.如果没有明确指定索引数据的ID,那么es会自动生成一个随机的ID,需要使用POST参数 curl -XPOST http://192.168.80.200:9200/zhouls/emp/ -d '{"name" : "tom"}' 3.如果想要确定我们创建的都是全新的数据 1:使用随机I

Elasticsearch之curl删除索引库

关于curl创建索引库的介绍,请移步 Elasticsearch之curl创建索引库 [[email protected] elasticsearch-2.4.3]$ curl -XPUT 'http://192.168.80.200:9200/zhouls'{"error":{"root_cause":[{"type":"index_already_exists_exception","reason":&

Elasticsearch之curl创建索引库

关于curl的介绍,请移步 Elasticsearch学习概念之curl 启动es,请移步 Elasticsearch的前后台运行与停止(tar包方式) Elasticsearch的前后台运行与停止(rpm包方式) 创建索引库,我这里命名为zhouls [[email protected] elasticsearch-2.4.3]$ curl -XPUT 'http://192.168.80.200:9200/zhouls'{"acknowledged":true}[[email pr