Elasticsearch的java api使用.docx_第1頁
Elasticsearch的java api使用.docx_第2頁
Elasticsearch的java api使用.docx_第3頁
Elasticsearch的java api使用.docx_第4頁
Elasticsearch的java api使用.docx_第5頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Elasticsearch的java api使用Java api 訪問ElasticSearch的一個演示.網(wǎng)上的例子都是各個之間獨立的,個別地方確實不好整合在一起來理解,希望通過此粗淺的例子能給使用java做搜索引擎的同學一些幫助.使用環(huán)境:1 Jdk1.6 u292 ElasticSearch(0.20.2)-RTF(感謝medcl的奉獻)版本,在谷歌中搜索github中下載.3 Windows 74 ElasticSearch 訪問用jar包.使用maven來添加 org.elasticsearch elasticsearch 0.20.2 ES的環(huán)境搭建:1解壓ElasticSearch(0.20.2)-RTF到某個目錄, 在本例中ESrtf解壓到了兩臺電腦上(ip:32,ip:5)2在本例中因為使用的是rtf的版本,所以只需修改Eshome config目錄下的elasticsearch.yml文件,在#: elasticsearch這行下增加: wallyCluster這行,作用為將es集群的默認名elasticsearch改為wallyCluster(自定義的集群名稱).在#network.host: 這行下增加network.host: 32(本例中es解壓到了2臺電腦中,所以另一臺的應(yīng)該為5),作用為綁定es啟動時對外服務(wù)的ip,因為我所用的機子有多個網(wǎng)卡,所以指定了,如果是單網(wǎng)卡,可以不用這句設(shè)置.3 在eshome下的bin目錄中直接運行elasticsearch.bat(前提為必須設(shè)置好java的home環(huán)境變量)啟動es使用rtf版本進行開發(fā),es基本不需要修改什么.至于es中使用到的內(nèi)存大小設(shè)置,中文分詞,cluster等等ES概念請百度.Java api的使用:網(wǎng)上看了各種例子,很大程度屬于轉(zhuǎn)載,講到j(luò)ava api的使用,都是簡單的某個方面的使用,看es官網(wǎng)介紹加自己的理解摸索,下面給出個完整使用javaapi的demo. import java.io.IOException;import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.client.Client;import org.elasticsearch.client.transport.TransportClient;import mon.settings.ImmutableSettings;import mon.settings.Settings;import mon.transport.InetSocketTransportAddress;import mon.xcontent.XContentBuilder;import mon.xcontent.XContentFactory;import com.wally.crj.util.TimeHelper;public class ESMappingBiz private Client client;public Client getClient() return client;public void setClient(Client client) this.client = client;/* * 預定義一個索引的mapping,使用mapping的好處是可以個性的設(shè)置某個字段等的屬性 * throws Exception */public void buildIndexSysDm() throws Exception/在本例中主要得注意,ttl及timestamp如何用java ,這些字段的具體含義,請去到es官網(wǎng)查看CreateIndexRequestBuilder cib=client.admin().indices().prepareCreate(productindex);XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject(we3r)/.startObject(_ttl)/有了這個設(shè)置,就等于在這個給索引的記錄增加了失效時間,/ttl的使用地方如在分布式下,web系統(tǒng)用戶登錄狀態(tài)的維護.field(enabled,true)/默認的false的.field(default,5m)/默認的失效時間,d/h/m/s 即天/小時/分鐘/秒.field(store,yes).field(index,not_analyzed).endObject().startObject(_timestamp)/這個字段為時間戳字段.即你添加一條索引記錄后,自動給該記錄增加個時間字段(記錄的創(chuàng)建時間),搜索中可以直接搜索該字段.field(enabled,true).field(store,no).field(index,not_analyzed).endObject().startObject(properties)/properties下定義的title等等就是屬于我們需要的自定義字段了,相當于數(shù)據(jù)庫中的表字段 ,此處相當于創(chuàng)建數(shù)據(jù)庫表.startObject(title).field(type, string).field(store, yes).endObject() .startObject(description).field(type, string).field(index, not_analyzed).endObject() .startObject(price).field(type, double).endObject() .startObject(onSale).field(type, boolean).endObject() .startObject(type).field(type, integer).endObject() .startObject(createDate).field(type, date).field(format,YYYYMMddhhMMSS).endObject().endObject().endObject().endObject(); cib.addMapping(prindextype, mapping);cib.execute().actionGet();/* * 該方法為增加索引記錄 * throws Exception */public void buildIndexSysDm22() throws Exception/ productindex為上個方法中定義的索引,prindextype為類型.jk8231為id,以此可以代替memchche來進行數(shù)據(jù)的緩存 IndexResponse response = client.prepareIndex(productindex, prindextype ,jk8231) .setSource(XContentFactory.jsonBuilder() .startObject() .field(title, abcd1)/該字段在上面的方法中mapping定義了,所以該字段就有了自定義的屬性,比如 type等 .field(description, 中國人3) .field(price, 232 ) .field(onSale,true) .field(type,2) .field(createDate,TimeHelper.getCurrentTime() .field(dfsfs,哈哈)/該字段在上面方法中的mapping中沒有定義,所以該字段的屬性使用es默認的. .endObject() ) .setTTL(8000)/這樣就等于單獨設(shè)定了該條記錄的失效時間,單位是毫秒,必須在mapping中打開_ttl的設(shè)置開關(guān) .execute() .actionGet(); IndexResponse response2 = client.prepareIndex(productindex, prindextype ,jk8234) .setSource(XContentFactory.jsonBuilder() .startObject() .field(title, abcd2) .field(description, 中國人2) .field(price, 232 ) .field(onSale,true) .field(type,22) .field(createDate,TimeHelper.getCurrentTime() .endObject() ) .execute() .actionGet(); /* * 得到訪問es的客戶端,我們使用Transport Client * return */public Client buildClient()Settings settings = ImmutableSettings.settingsBuilder().put(client.transport.sniff, true).put(, wallyCluster).build();Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(32, 9300) .addTransportAddress(new InetSocketTransportAddress(5, 9300);return client;/* * 搜索的使用 */public void exm()System.out.println(刪除);DeleteResponse responsedd = client.prepareDelete(productindex, prindextype, 34dds1) .setOperationThreaded(false) .execute() .actionGet();System.out.println(根據(jù)主鍵搜索得到值);GetResponse responsere = client.prepareGet(productindex, prindextype, oht-Sp87SA6J5l3yo9dagw) .execute() .actionGet();System.out.println(完成讀取-+responsere.getSourceAsString();System.out.println(搜索);SearchRequestBuilder builder= client.prepareSearch(productindex) /搜索productindex,prepareSearch(String. indices)注意該方法的參數(shù),可以搜索多個索引 .setTypes(prindextype) .setSearchType(SearchType.DEFAULT) .setFrom(0) .setSize(50); QueryBuilder qb2 = QueryBuilders.boolQuery() / boolQuery() 就相當于 sql中的and .must(new QueryStringQueryBuilder(萬d 里).field(description)/QueryStringQueryBuilder是單個字段的搜索條件,相當于組織sql的 where后面的 字段名=字段值 .should(new QueryStringQueryBuilder(3).field(dfsfs) .must(QueryBuilders .termQuery(dfsfs, 里);/關(guān)于QueryStringQueryBuilder及termQuery等的使用可以使用es插件head來進行操作體會個中query的不同 builder.setQuery(qb2); SearchResponse responsesearch = builder.execute().actionGet(); System.out.println(+responsesearch);tryString jsondata= responsesearch.getHits().getHits()0.getSourceAsString();System.out.println(搜索出來的數(shù)據(jù)jsondata- +jsondata);catch(Exception es)public static void main(String

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論