检索索引库

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch Java Api(二) -检索索引库标签: esindex2016-06-23 21:40 8386人阅读 评论(29) 收藏 举报 分类:Elasticsearch(31) 版权声明:本文为博主原创文章,地址:http://blog.csdn.net/napoay,转载请留言. 目录(?)[+] 上篇博客记录了如何用Java调用api把数据写入索引,这次记录下如何搜索。

ElasticSearch Java Api(二) -检索索引库

标签: esindex
 分类:
 

目录(?)[+]

 

上篇博客记录了如何用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
  4. 高亮显示
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
存储 SQL 关系型数据库
(四)MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述
本篇中就对MySQL的索引机制有了全面认知,从索引的由来,到索引概述、索引管理、索引分类、唯一/全文/联合/空间索引的创建与使用等内容,进行了全面概述。
180 0
|
6月前
|
存储 数据库 索引
faiss 三种基础索引方式
faiss 三种基础索引方式
315 1
|
SQL 数据库 索引
08Lucene索引库查询 - 介绍
08Lucene索引库查询 - 介绍
58 0
|
索引
06Lucene索引库的删除
06Lucene索引库的删除
44 0
|
索引
07Lucene索引库的修改
07Lucene索引库的修改
36 0
|
JSON 数据格式 开发者
创建索引库和索引说明 | 学习笔记
快速学习创建索引库和索引说明
创建索引库和索引说明 | 学习笔记
|
存储 关系型数据库 MySQL
索引结构与检索原理|学习笔记
快速学习索引结构与检索原理
110 0
索引结构与检索原理|学习笔记
|
分布式计算 资源调度 Hadoop
创建索引库和索引_说明|学习笔记
快速学习创建索引库和索引_说明。
103 0
|
SQL 关系型数据库 MySQL
检索单个列
mysql检索单个列
109 0