原英文文档: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 API和filter 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(12).to(18)) // Filter 查询之二, FilterBuilders接下来会解释. 在这里"age"是要查询的field, 后面的数字是查询的条件范围 .setFrom(0).setSize(60).setExplain(true) //0-60 表示显示数量 .execute() .actionGet();
提示:以上所有参数都是可选的.
最小的查询如下所示:
// MatchAll on the whole cluster with all default options SearchResponse response = client.prepareSearch().execute().actionGet();
为了使用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个数.
略...
QueryBuilders.idsQuery().ids("1", "2"); //通过id来查询
略...
略...
略...
略...
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
略....不懂.....
QueryBuilder qb = QueryBuilders.fuzzyQuery("name", "kimzhy"); //根据提供的字符串作为前缀进行查询
略....不懂.....
QueryBuilder qb = QueryBuilders.matchAllQuery(); //显示所有的记录
* More Like This Query * More Like This Field Query
略...不懂......
QueryBuilders.prefixQuery("brand", "heine"); //brand是field, heine是前缀查询字符串
QueryBuilder qb = QueryBuilders.queryString("+kimchy -elasticsearch");
略....不懂.....
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
略...
略...
略...
略...
略...
略...
略...
略...
附上一个自己写的小型Test, 简单易懂.
1 import java.io.IOException; 2 3 import org.elasticsearch.action.index.IndexResponse; 4 import org.elasticsearch.action.search.SearchResponse; 5 import org.elasticsearch.action.search.SearchType; 6 import org.elasticsearch.client.Client; 7 import org.elasticsearch.client.transport.TransportClient; 8 import org.elasticsearch.common.transport.InetSocketTransportAddress; 9 import org.elasticsearch.common.xcontent.XContentBuilder; 10 import org.elasticsearch.common.xcontent.XContentFactory; 11 import org.elasticsearch.index.query.FilterBuilders; 12 import org.elasticsearch.index.query.QueryBuilder; 13 import org.elasticsearch.index.query.QueryBuilders; 14 import org.elasticsearch.search.SearchHits; 15 16 import user.User; 17 18 19 public class First_ES_Test { 20 21 private Client client; 22 23 public void init() 24 { 25 //ip可以在http://localhost:9200/_plugin/head/中自行查询 26 client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("192.168.1.103", 9300)); 27 } 28 29 public void close() 30 { 31 client.close(); 32 } 33 34 /* 35 * create index 36 **/ 37 public void createIndex() { 38 for (int i = 0; i < 1000; i++) { 39 User user = new User(); 40 user.setId(new Long(i)); 41 user.setName("xxx0624 " + i); 42 user.setAge(i % 100); 43 System.out.println("ok:"+i); 44 client.prepareIndex("users", "user").setSource(generateJson(user)) 45 .execute().actionGet(); 46 } 47 } 48 49 /* 50 * 转换成json对象 51 * 52 * @param user 53 * @return json(String) 54 **/ 55 private String generateJson(User user) { 56 String json = ""; 57 try { 58 XContentBuilder contentBuilder = XContentFactory.jsonBuilder() 59 .startObject(); 60 contentBuilder.field("id", user.getId() + ""); 61 contentBuilder.field("name", user.getName()); 62 contentBuilder.field("age", user.getAge() + ""); 63 json = contentBuilder.endObject().string(); 64 } catch (IOException e) { 65 e.printStackTrace(); 66 } 67 return json; 68 } 69 70 public void search() { 71 QueryBuilder qb = QueryBuilders 72 .boolQuery() 73 .must(QueryBuilders.termQuery("age", "0")) 74 .should(QueryBuilders.termQuery("id", "0")) 75 //.mustNot(QueryBuilders.termQuery("content", "test2")) 76 //.should(QueryBuilders.termQuery("content", "test3")) 77 ; 78 79 SearchResponse response = client.prepareSearch("users") 80 .setTypes("user") 81 .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 82 .setQuery(qb) // Query 83 //.setFilter(FilterBuilders.rangeFilter("age").from(0).to(100)) // Filter 84 .setFrom(0).setSize(100).setExplain(true) 85 .execute().actionGet(); 86 SearchHits hits = response.getHits(); 87 System.out.println(hits.getTotalHits()); 88 for (int i = 0; i < hits.getHits().length; i++) { 89 System.out.println(hits.getHits()[i].getSourceAsString()); 90 } 91 } 92 93 public static void main(String[] args) { 94 95 First_ES_Test client = new First_ES_Test(); 96 client.init(); 97 client.createIndex(); 98 client.search(); 99 client.close(); 100 101 } 102 103 public void print(String output) 104 { 105 System.out.print(output); 106 } 107 public void println(String output) 108 { 109 System.out.println(output); 110 } 111 112 }
http://www.cnblogs.com/xxx0624/
相关推荐
Elasticsearch依赖于Java运行环境,因此首先需要安装Java JDK。 - **步骤**: 1. 下载Java JDK (需Java 8及以上版本)。 2. 解压安装包。 3. 配置环境变量 (`JAVA_HOME`, `JRE_HOME`, `PATH`, `CLASSPATH`)。 4. ...
**J2ME到Android移植SDK 1.16详解** J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于开发移动设备、嵌入式系统等资源有限的设备上的应用程序。随着Android平台的崛起,许多J2ME开发者希望能将他们的...
### Spring Boot集成Elasticsearch详解 #### 一、前言 在进行系统开发时,往往需要高效的全文检索功能,而Elasticsearch作为一个优秀的分布式搜索和分析引擎,常常被用来实现这些功能。对于Java开发者而言,将...
### Android SDK、NDK与API Level对应关系详解 #### 一、引言 在Android开发过程中,SDK(Software Development Kit)和NDK(Native Development Kit)是开发者们经常接触到的概念,而API Level则是用于标识不同...
### 索尼爱立信手机的Java平台与屏幕尺寸详解 #### 一、引言 随着移动通信技术的发展,智能手机的功能越来越强大,其中Java平台作为早期移动应用开发的重要工具之一,在索尼爱立信等品牌手机中占据着举足轻重的地位...
#### 二、Elasticsearch详解 Elasticsearch是一个基于Lucene的分布式搜索引擎。它提供了一个高度可扩展的全文搜索和分析引擎,能够高效地处理大量数据,并提供实时搜索功能。 ##### 2.1 创建执行用户 为了确保...
OpenGL ES是专为嵌入式设备如Android手机和平板设计的一种3D图形处理API,它是OpenGL标准的一个子集。在Android开发中,使用OpenGL ES可以创建丰富的3D图形界面,为用户带来更生动的视觉体验。OpenGL ES 1.0是基于...
### OpenGL教程:onSurfaceCreated、onDrawFrame、onSurfaceChanged详解及纹理映射技术 #### 一、OpenGL基本概念 OpenGL是一种广泛使用的图形渲染库,主要用于2D和3D图形的绘制。它提供了丰富的API来处理图形数据...
### Android 3D 游戏开发教程知识点梳理 #### 一、OpenGL ES 基础概念 ##### 1....- **定义**:顶点是三维空间中的一...随着对OpenGL ES和相关API的深入了解,开发者可以进一步优化游戏性能,实现更为复杂的功能和特效。
### Android 3D游戏开发教程知识点详解 #### 一、引言 随着移动设备性能的不断提升,Android平台上的3D游戏越来越受到欢迎。本教程旨在为初学者提供一个全面了解Android 3D游戏开发的基础框架,包括游戏引擎的使用...
- **3D Libraries**:基于OpenGL ES 1.0 API实现,支持硬件加速或高优化的软件加速。 - **FreeType**:字体渲染库,提供高质量的文本渲染能力。 ### 结论 本文档为Android 1.6版本的官方中文翻译,对于初学者和...
- **3D 图形库**:基于 OpenGL ES 1.0 API 实现,支持硬件加速或高度优化的 3D 软件渲染。 - **FreeType**:支持位图和矢量字体的显示。 - **SQLite**:功能强大的轻量级关系型数据库引擎。 - **Android 运行时**...