/×××××××××××××××××××××××××××××××××××××××××/

Author:xxx0624

HomePage:http://www.cnblogs.com/xxx0624/

/×××××××××××××××××××××××××××××××××××××××××/

原英文文档:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/index.html (各个版本的api)

这里有一个简单的使用search的官方文档:http://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html#java-search-template

这是另外一个作者有关es api的翻译:http://blog.csdn.net/woshiyexinjie/article/details/41088705

Search部分:

查询有两种方法:query Java APIfilter Java API

首先看一个例子:

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.FilterBuilders.*;
import org.elasticsearch.index.query.QueryBuilders.*; SearchResponse response = client.prepareSearch("index1", "index2")
//设置要查询的索引(index)
.setTypes("type1", "type2")
//设置type, 这个在建立索引的时候同时设置了, 或者可以使用head工具查看
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.termQuery("multi", "test"))
// Query 查询之一. 对于QueryBuilders接下来会解释. 在这里"multi"是要查询的field,"test"是要查询的内容
.setFilter(FilterBuilders.rangeFilter("age").from().to())
// Filter 查询之二, FilterBuilders接下来会解释. 在这里"age"是要查询的field, 后面的数字是查询的条件范围
.setFrom().setSize().setExplain(true)
//0-60 表示显示数量
.execute()
.actionGet();

提示:以上所有参数都是可选的.

最小的查询如下所示:

// MatchAll on the whole cluster with all default options
SearchResponse response = client.prepareSearch().execute().actionGet();

1.query Java API

为了使用QueryBuilders必须先import下面的类:

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

第一种:Match Query (链接内有详细解释)

QueryBuilder qb = QueryBuilders.matchQuery("name", "kimchy elasticsearch");
//name是field,kimchy elasticsearch是要查询的字符串

第二种:MultiMatch Query (链接内有详细解释)

QueryBuilder qb = QueryBuilders.multiMatchQuery(
"kimchy elasticsearch", // Text you are looking for
//kimchy elasticsearch是要查询的字符串
"user", "message" // Fields you query on
//user 和 message都是field
);

第三种: Boolean Query (链接内有详细解释)

QueryBuilder qb = QueryBuilders
.boolQuery()
.must(termQuery("content", "test1"))
.must(termQuery("content", "test4"))
.mustNot(termQuery("content", "test2"))
.should(termQuery("content", "test3"));
//content为field,test为查询内容.
//其中must表示必须满足,mustNot表示必须不满足,should表示可有可无

如果bool查询语句中不存在must,则必须至少有一个should查询,同时可以通过minimum_should_match参数来设置至少需要满足的should个数.

Boosting Query

略...

IDs Query

QueryBuilders.idsQuery().ids("1", "2");
//通过id来查询

Custom Score Query

略...

Custom Boost Factor Query

略...

Constant Score Query

略...

Disjunction Max Query

略...

Field Query

QueryBuilders.fieldQuery("name", "+kimchy -dadoonet");

// Note that you can write the same query using queryString query.
QueryBuilders.queryString("+kimchy -dadoonet").field("name");
//+表示必须有的 -表示一定没有的 name表示查询的filed

Fuzzy Like This Query * Fuzzy Like This Field Query

略....不懂.....

Fuzzy Query

QueryBuilder qb = QueryBuilders.fuzzyQuery("name", "kimzhy");
//根据提供的字符串作为前缀进行查询

Has Child Query * Has Parent

略....不懂.....

Match All Query

QueryBuilder qb = QueryBuilders.matchAllQuery();
//显示所有的记录

More Like This Query * More Like This Field Query

略...不懂......

Prefix Query

QueryBuilders.prefixQuery("brand", "heine");
//brand是field, heine是前缀查询字符串

QueryString Query

QueryBuilder qb = QueryBuilders.queryString("+kimchy -elasticsearch");

略....不懂.....

Range Query

QueryBuilder qb = QueryBuilders
.rangeQuery("price")
.from(5)
.to(10)
.includeLower(true)
.includeUpper(false);
//price是field, 数字代表范围.除了from to还有lt gt等等...

Span First Query * Span Near Query * Span Not Query * Span Or Query * Span Term Quer// Span First

QueryBuilders.spanFirstQuery(
QueryBuilders.spanTermQuery("user", "kimchy"), // Query
3 // Max End position
);
//只匹配在Field开头出现的, 数字表示从开头起的几个单词内查询, 则此查询意思是:user中的开头3个单词内,kimchy是否能查询到 // Span Near
QueryBuilders.spanNearQuery()
.clause(QueryBuilders.spanTermQuery("field","value1")) // Span Term Queries
.clause(QueryBuilders.spanTermQuery("field","value2"))
.clause(QueryBuilders.spanTermQuery("field","value3"))
.slop(12) // Slop factor
.inOrder(false)
.collectPayloads(false);
//匹配距离相近的, inOrder表示:true表示按照value1/2/3的顺序来计算距离(两个单词中间夹一个单词 距离为1). 举例: a b c d. {a,b,c}中a,c的距离为1.
//则此查询的意思是:在field中,如果value1/2/3的距离是在12以内的,那么可以查询到.反之不能. // Span Not
QueryBuilders.spanNotQuery()
.include(QueryBuilders.spanTermQuery("field","value1"))
.exclude(QueryBuilders.spanTermQuery("field","value2"));
//匹配不重叠的,即除那些两个SpanQuery相互重叠的结果
//例如有两个Document:”the quick brown fox jump over a lazy dog”和”the quick red fox jumps over the sleepy cat”
//SpanNearQuery quick_fox =new SpanNearQuery(new SpanQuery[]{quick, fox}, 1, true); //基础的SpanQuery,默认匹配2个Document
//匹配的这两个结果的中间重叠部分为:red/brown
//SpanNotQuery quick_fox_dog = new SpanNotQuery(quick_fox, dog);//因为dog不是red或者brown,所以仍为两个
//SpanNotQuery no_quick_red_fox = new SpanNotQuery(quick_fox, red); //现在只剩下brown那个doc了
//这种Query经常用于连接的时候。 // Span Or
QueryBuilders.spanOrQuery()
.clause(QueryBuilders.spanTermQuery("field","value1"))
.clause(QueryBuilders.spanTermQuery("field","value2"))
.clause(QueryBuilders.spanTermQuery("field","value3"));
//SpanQuery的合集 // Span Term
QueryBuilders.spanTermQuery("user","kimchy"); //该部分详见:http://www.coder4.com/archives/774

Term Query

略...

Terms Query

略...

Top Children Query

略...

Wildcard Query

略...

Nested Query

略...

Custom Filters Score Query

略...

Indices Query

略...

GeoShape Query

略...

2.filter Java API

附上一个自己写的小型Test, 简单易懂.

 import java.io.IOException;

 import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits; import user.User; public class First_ES_Test { private Client client; public void init()
{
//ip可以在http://localhost:9200/_plugin/head/中自行查询
client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("192.168.1.103", 9300));
} public void close()
{
client.close();
} /*
* create index
**/
public void createIndex() {
for (int i = 0; i < 1000; i++) {
User user = new User();
user.setId(new Long(i));
user.setName("xxx0624 " + i);
user.setAge(i % 100);
System.out.println("ok:"+i);
client.prepareIndex("users", "user").setSource(generateJson(user))
.execute().actionGet();
}
} /*
* 转换成json对象
*
* @param user
* @return json(String)
**/
private String generateJson(User user) {
String json = "";
try {
XContentBuilder contentBuilder = XContentFactory.jsonBuilder()
.startObject();
contentBuilder.field("id", user.getId() + "");
contentBuilder.field("name", user.getName());
contentBuilder.field("age", user.getAge() + "");
json = contentBuilder.endObject().string();
} catch (IOException e) {
e.printStackTrace();
}
return json;
} public void search() {
QueryBuilder qb = QueryBuilders
.boolQuery()
.must(QueryBuilders.termQuery("age", "0"))
.should(QueryBuilders.termQuery("id", "0"))
//.mustNot(QueryBuilders.termQuery("content", "test2"))
//.should(QueryBuilders.termQuery("content", "test3"))
; SearchResponse response = client.prepareSearch("users")
.setTypes("user")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(qb) // Query
//.setFilter(FilterBuilders.rangeFilter("age").from(0).to(100)) // Filter
.setFrom(0).setSize(100).setExplain(true)
.execute().actionGet();
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
for (int i = 0; i < hits.getHits().length; i++) {
System.out.println(hits.getHits()[i].getSourceAsString());
}
} public static void main(String[] args) { First_ES_Test client = new First_ES_Test();
client.init();
client.createIndex();
client.search();
client.close(); } public void print(String output)
{
System.out.print(output);
}
public void println(String output)
{
System.out.println(output);
} }

待续...

ElasticSearch Java api 详解_V1.0的更多相关文章

  1. Java数据持久层框架 MyBatis之API学习八(Java API详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  2. Hbase Java API详解

    HBase是Hadoop的数据库,能够对大数据提供随机.实时读写访问.他是开源的,分布式的,多版本的,面向列的,存储模型. 在讲解的时候我首先给大家讲解一下HBase的整体结构,如下图: HBase ...

  3. HDFS常用的Java Api详解

    转自:http://blog.csdn.net/michaelwubo/article/details/50879832 一.使用Hadoop URL读取数据 package hadoop; impo ...

  4. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  5. Elasticsearch Java API深入详解

    0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...

  6. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  7. Java 8 Streams API 详解

    流式编程作为Java 8的亮点之一,是继Java 5之后对集合的再一次升级,可以说Java 8几大特性中,Streams API 是作为Java 函数式的主角来设计的,夸张的说,有了Streams A ...

  8. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  9. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

随机推荐

  1. windows phone 8 开发系列(二)Hello Wp8!

    上篇我们了解了WP8的环境搭建,从今天开始,我们就正式进入WP8的设计,开发阶段. 一. 项目模板介绍 打开vs,选择Windows Phone的项目模板,我们发现如下有很多模板,那么我们就从认识这些 ...

  2. 弹性布局-flex

    浅谈display:flex   display:flex 意思是弹性布局 首先flex的出现是为了解决哪些问题呢? 一.页面行排列布局 像此图左右两个div一排显示 可以用浮动的布局方式 html部 ...

  3. ClickOnce证书签名

    打开Microsoft .NET Framework 的SDK命令提示,按以下步骤操作: 1.创建一个自我签署的X.509证书(.cer)和一个.pvk私钥文件,用到makecert工具,命令如下: ...

  4. Android 中 shape 图形的使用

    转载于:http://kofi1122.blog.51cto.com/2815761/521605 Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shap ...

  5. [大牛翻译系列]Hadoop(18)MapReduce 文件处理:基于压缩的高效存储(一)

    5.2 基于压缩的高效存储 (仅包括技术25,和技术26) 数据压缩可以减小数据的大小,节约空间,提高数据传输的效率.在处理文件中,压缩很重要.在处理Hadoop的文件时,更是如此.为了让Hadoop ...

  6. Swift初步介绍

    Swift是本届WWDC大会苹果推出的一门新开发语言,开发者网站上已经放出了这门新语言的介绍.教程和手册,如果手里有一台iOS设备的话,通过苹果的iBooks应用,从它的官方书店里搜索Swift,可以 ...

  7. WIN7右下角的声音图标不见了

    有时候电脑启动了,但是声音图标却不见了,造成调试声音相当的麻烦,那么怎么来处理呢? 一:ctrl+shit+Esc键打开任务管理器 二:找到exeplore.exe,结束进程. 三:重新建立进程 上述 ...

  8. Error NO.2013 Lost connection to Mysql server during query

    系统:[root@hank-yoon ~]# cat /etc/redhat-release CentOS release 6.3 (Final) DB版本:mysql> select @@ve ...

  9. Teradata中fastload使用

    Teradata Fastload Utility 是teradata数据库中一个基于命令行的快速load大量数据到一个空表的工具. 数据可以从以下途径被load: 1) Disk 或 tape; 2 ...

  10. 7、XAML的编译过程

    对于动态皮肤场景来说,在运行时加载和解析XAML是有意义的,对于那些没有支持XAML编译的.NET语言也是有意义的.但大多数WPF项目会通过MSBuild和Visual Studio完成XAML编译. ...