es 1.x 사용시, prefix filter에 array를 지원하지 않는다. 


문서에 있는 것처럼 한 필드를 기준으로만 쓸 수 있다.

https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-prefix-filter.html#_caching_14


{ "constant_score" : { "filter" : { "prefix" : { "user" : "ki" } } } }


간단한 prefix filter 자바 코딩을 하려면 다음과 같다.



public List<Citizen> getAddressFromPrefix(List<String> prefixs) {

List<Citizen> citizens = Lists.newArrayList();

prefixs.forEach(prefix -> {

FilterBuilder filter = prefixFilter(
"address",
prefix
);

SearchResponse response = searchClient.prepareSearch("citizen").setTypes("address")
.setPostFilter(filter)
.setSize(Integer.MAX_VALUE)
.execute()
.actionGet();

SearchHits searchHits = response.getHits();
for (SearchHit searchHit : searchHits.getHits()) {
Map<String, Object> map = searchHit.getSource();
Citizen citizen = new Citizen();
citizen.id = searchHit.getId();

citizen.address = (String) map.get("address");
citizens.add(citizen);
}

//citizens.forEach(citizen -> System.out.println(citizen.id + ":" + citizen.address));
}
);

return citizens;
}




참고 자료

https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.7/search.html

https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.7/query-dsl-filters.html

https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.7/prefix-filter.html







Posted by '김용환'
,