[Elasticsearch] Term vs Terms Query
Elastic/Elasticsearch 2021. 10. 27. 16:14보셔야 하는 클래스는
- TermQueryBuilder
- TermsQueryBuilder
입니다.
두 Query 의 큰 차이는 단독으로 사용 되었을 때 Scoring 이 어떻게 되느냐 인데요.
Term 은 Score 계산이 되어서 나오고 Terms 는 Constant Score Query 처럼 1.0 으로 나온다는 것입니다.
코드를 좀 더 따라 가다 보면
- MapperFieldType
클래스 내 Query API 들에 대한 Interface 나 Implement 코드를 확인해 보실 수 있습니다.
아래는 Terms Query 에 대한 코드를 가져온 내용입니다.
/** Build a constant-scoring query that matches all values. The default implementation uses a
* {@link ConstantScoreQuery} around a {@link BooleanQuery} whose {@link Occur#SHOULD} clauses
* are generated with {@link #termQuery}. */
public Query termsQuery(Collection<?> values, @Nullable SearchExecutionContext context) {
BooleanQuery.Builder builder = new BooleanQuery.Builder();
for (Object value : values) {
builder.add(termQuery(value, context), Occur.SHOULD);
}
return new ConstantScoreQuery(builder.build());
}
뭐 혼자 기억 하기 위한 기록 이라서 이 정도까지만 기록해 두겠습니다.