분산 검색 Elasticsearch - QueryBuilders.idsQuery

3766 단어 Elasticsearch
주: 이 프로젝트의 기초는 분포식 검색 Elasticsearch-프로젝트 프로세스(一)와 분포식 검색 Elasticsearch-프로젝트 프로세스(二)로 프로젝트 골격은 여기서 다운로드할 수 있습니다.
ES 소스 코드에서 idsQuery에 대한 설명은 다음과 같습니다.
    /**
     * Constructs a query that will match only specific ids within types.
     *
     * @param types The mapping/doc type
     */
    public static IdsQueryBuilder idsQuery(@Nullable String... types) {
        return new IdsQueryBuilder(types);
    }


type과 id를 지정해서 조회합니다.
예제 코드는 다음과 같습니다.
/**
 * @author Geloin
 */
package com.gsoft.gsearch.util;

import junit.framework.Assert;

import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.junit.Test;

import com.gsoft.gsearch.BaseTest;
import com.gsoft.gsearch.entity.Person;

/**
 * @author Geloin
 *
 */
public class IdsQueryTest extends BaseTest {
	@Test
	public void idsQuery() {
		try {
			
			String id1 = "udisjkdfd";
			String id2 = "ewdsfdsfe";

			BulkRequestBuilder builder = client.prepareBulk();
			//  
			Person p = new Person();
			p.setAge(20);
			p.setId(id1);
			p.setIsStudent(true);
			p.setName(" " + Math.random());
			p.setSex(" ");

			String source = ElasticSearchUtil.BeanToJson(p);

			IndexRequest request = client.prepareIndex(index, type, p.getId())
					.setSource(source).request();

			builder.add(request);

			Person p2 = new Person();
			p2.setAge(20);
			p2.setId(id2);
			p2.setIsStudent(true);
			p2.setName(" " + Math.random());
			p2.setSex(" ");

			String source2 = ElasticSearchUtil.BeanToJson(p2);

			IndexRequest request2 = client
					.prepareIndex(index, type, p2.getId()).setSource(source2)
					.request();

			builder.add(request2);

			BulkResponse response = builder.execute().actionGet();
			if (response.hasFailures()) {
				Assert.fail(" !");
			}

			//  
			QueryBuilder qb = QueryBuilders.idsQuery(type).ids(id1, id2);

			SearchResponse sr = client.prepareSearch(index).setTypes(type)
					.setQuery(qb).setFrom(0).setSize(12).execute().actionGet();

			SearchHits hits = sr.getHits();

			if (null != hits && hits.totalHits() > 0) {
				for (SearchHit hit : hits) {
					String json = hit.getSourceAsString();

					Person newPerson = mapper.readValue(json, Person.class);
					System.out.println("id\t\t" + newPerson.getId());
					System.out.println("name\t\t" + newPerson.getName());
					System.out.println("sex\t\t" + newPerson.getSex());
					System.out.println("age\t\t" + newPerson.getAge());
					System.out.println("isStudent\t\t"
							+ newPerson.getIsStudent());
				}
			} else {
				log.error(" !");
				return;
			}

			//  
			long count = client.prepareCount(index).setTypes(type).setQuery(qb)
					.execute().actionGet().count();

			log.info(" :" + count);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != client) {
				client.close();
			}
			if (null != node) {
				node.close();
			}
		}
	}
}

참고: idsQuery를 생성한 후 id를 설정해야 합니다.
, id를 설정하는 방법은 다음과 같은 두 가지가 있습니다.
    /**
     * Adds ids to the filter.
     */
    public IdsQueryBuilder addIds(String... ids) {
        values.addAll(Arrays.asList(ids));
        return this;
    }

    /**
     * Adds ids to the filter.
     */
    public IdsQueryBuilder ids(String... ids) {
        return addIds(ids);
    }

좋은 웹페이지 즐겨찾기