javaAPI 를 사용 하여 elasticsearch 를 조작 합 니 다.
7088 단어 전체 텍스트 검색
1. 자바 인 코딩 을 통 해 클 라 이언 트 만 들 기
elasticsearch 클 라 이언 트 는 자바 작업 elasticsearch 의 핵심 대상 입 니 다. 예 를 들 어 색인 생 성, 색인 추가, 색인 삭제 등 모든 작업 이 이 대상 의 api 가 실 행 됩 니 다.
//
Settings settings = Settings.settingsBuilder().put("client.transport.sniff", true)
.put("client.transport.ping_timeout", ping_timeout, TimeUnit.SECONDS)
.put("client.transport.nodes_sampler_interval", nodes_sampler_interval,
TimeUnit.SECONDS)
.put("cluster.name", Cluster_Name).build();
/ / 파일 settings 설정 을 통 해 elasticsearch 의 Client 클 라 이언 트 elasticsearchClient = TransportClient. builder (). settings (settings). build () 를 만 듭 니 다.
/ / elasticsearch 와 소통 할 포트 를 추가 하 는 것 이 좋 습 니 다.elasticsearch 서비스 와 직접 접촉 하 는 기본 포트 는 9200 이 고 클 라 이언 트 통신 을 사용 하 는 포트 번 호 는 9300 입 니 다.
((TransportClient) elasticsearchClient).addTransportAddress(
new InetSocketTransportAddress(new InetSocketAddress(ES_HOST, ES_TCP_PORT)));
2. 색인 추가 작업
1. 단일 색인 추가
IndexRequestBuilder 에서 색인 을 추가 하 는 핵심 대상 을 만 듭 니 다. 이 대상 을 만 들 때 색인 이름 Index, 유형 명 Type, 문서 필드 의 id 를 만 들 고 색인 으로 추 가 된 필드 를 설정 합 니 다. 이 대상 은 성 과 를 만 듭 니 다.
//
IndexRequestBuilder prepareIndex = esClient.prepareIndex(indexConfiguration.getIndexName(), indexConfiguration.getIndexType(),
Long.toString(message.getEsId()));
// xml
XContentBuilder mapping = XContentFactory.jsonBuilder();
mapping.startObject(); // field
Map filedCfg = indexConfiguration.getFieldCfg();
Map map = JSONUtils.toMap(message);
for(Map.Entry entry:map.entrySet()){
String key = entry.getKey();
if(filedCfg.containsKey(key)){
String source = filedCfg.get(key).getSource();
Object obj = map.get(source);
//
mapping.field(source,obj);
}
}
mapping.endObject(); // field
prepareIndex.setSource(mapping);
prepareIndex.execute().actionGet();
return prepareIndex;
2、
BulkRequestBuilder ,
IndexRequestBuilder , 。
//1、
BulkRequestBuilder bulkrequest = esClient.prepareBulk().setRefresh(true);
IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();
//2、 ( , )
eSHelp.beginBulkOperation(parseXmlByXMlConfigure());
//
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200,
200, Constants.ES.REBUILD.KEEPALIVETIME, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue(20), new ThreadPoolExecutor.CallerRunsPolicy());
//
AtomicLong counter = new AtomicLong();
//
long startTime = System.currentTimeMillis();
//3、 IndexRequestBuilder
List list = getList();
for(UserMessage message :list){
//
IndexRequestBuilder indexRequestBuilder = addIndexRequestBuilder(message,indexConfiguration);
bulkrequest.add(indexRequestBuilder);
//4、
if(bulkrequest.numberOfActions()>=200){
threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));
//
bulkrequest = esClient.prepareBulk();
}
}
//
if(bulkrequest.numberOfActions()>0){
threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));
//
bulkrequest = esClient.prepareBulk();
}
threadPool.shutdown();
threadPool.awaitTermination(24, TimeUnit.HOURS);
eSHelp.endBulkOperation(parseXmlByXMlConfigure());
System.out.println(" :"+counter.get());
3. 검색 작업
검색 작업 은 그 중에서 가장 중요 하고 복잡 한 작업 입 니 다. 핵심 클래스 인 SearchRequestBuilder 는 다양한 검색 유형 을 구성 하여 검색 합 니 다. 그 중에서 구체 적 인 검색 인 터 페 이 스 는 Query Builder, elasticsearch 는 Query Builders 를 제공 하여 풍부 한 Query Builder 대상 을 구성 하여 조회 합 니 다.조 회 는 페이지, 하 이 라이트 등 조작 을 할 수 있다.
IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();
int pageNumer = 10; //
int pageSize = 20; //
//
SearchRequestBuilder searchRequestBuilder = esClient.prepareSearch(indexConfiguration.getIndexName())
.setTypes(indexConfiguration.getIndexType()).setSearchType(SearchType.QUERY_THEN_FETCH)
.setExplain(false).setFrom((pageNumer - 1) * pageSize).setSize(pageSize);
//
//QueryBuilder query = new MatchQueryBuilder("message", " ");
//
//QueryBuilder query = new MultiMatchQueryBuilder(" ", "message");
//
QueryBuilder query = new TermQueryBuilder("message", " ");
searchRequestBuilder.setQuery(query);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List messages = ESUtils.recallSearchResult(searchResponse, UserMessage.class);
System.out.println(" :"+messages.size());
System.out.println(JSON.toJSON(messages));
//QueryBuilders API ,
4. 삭제 작업
1. 단일 기록 삭제
기록 을 삭제 하려 면 deleteRequestBuilder 대상 을 구축 하고 해당 하 는 기록 id 를 만들어 삭제 해 야 합 니 다. 코드 는 다음 과 같 습 니 다.
IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();
// id document
DeleteRequestBuilder drb = esClient.prepareDelete(indexConfiguration.getIndexName(),
indexConfiguration.getIndexType(), String.valueOf(9999));
DeleteResponse dr = drb.execute().actionGet();
2. 여러 기록 삭제
색인 을 대량으로 추가 하 는 것 과 유사 하 며, BulkRequestBuilder 대상 을 사용 하여 여러 개의 DeleteRequestBuilder 를 추가 하고 스 레 드 풀 을 통 해 병행 처리 해 야 합 니 다.코드 는 다음 과 같 습 니 다:
1、
BulkRequestBuilder bulkrequest = esClient.prepareBulk().setRefresh(true);
IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();
2、 ( , )
eSHelp.beginBulkOperation(parseXmlByXMlConfigure());
//
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200,
200, Constants.ES.REBUILD.KEEPALIVETIME, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue(20), new ThreadPoolExecutor.CallerRunsPolicy());
//
AtomicLong counter = new AtomicLong();
//
long startTime = System.currentTimeMillis();
3、 IndexRequestBuilder
List list = getList();
for(UserMessage message :list){
//
DeleteRequestBuilder deleteRequestBuilder = esClient.prepareDelete(indexConfiguration.getIndexName(),
indexConfiguration.getIndexType(), String.valueOf(message.getEsId()));
bulkrequest.add(deleteRequestBuilder);
//4、
if(bulkrequest.numberOfActions()>=200){
threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));
//
bulkrequest = esClient.prepareBulk();
}
}
//
if(bulkrequest.numberOfActions()>0){
threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));
//
bulkrequest = esClient.prepareBulk();
}
threadPool.shutdown();
threadPool.awaitTermination(24, TimeUnit.HOURS);
eSHelp.endBulkOperation(parseXmlByXMlConfigure());
System.out.println(" :"+counter.get());
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Elasticsearch6.x 변화(1)stringstring 유형은 ElasticSearch 이전 버전에서 많이 사용되며, ElasticSearch 5.x부터string을 지원하지 않습니다.text와 키워드 형식으로 대체합니다.(2)text는 하나...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.