01: /*
02: * Copyright 2004-2006 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.compass.core;
18:
19: import org.compass.core.util.Parameter;
20:
21: /**
22: * <p>A term and frequencies builder, allows to set different settings regaring
23: * the avilable terms for certain properties and their respective frequencies.
24: *
25: * <p>Allows to narrow down the sub indexes searched either by setting the aliases
26: * or the sub indexes (or both of them).
27: *
28: * <p>Allows to set how the returned terns will be sort. Either by the TERM value or
29: * the TERM frequency. Note, the (adjustable) size of terms will always be based on
30: * the ones with the highest frequency. Within this size based list (controlled using
31: * {@link #setSize(int)}), the sorting will occur.
32: *
33: * <p>By default, the frequency will be returned according to the search engine
34: * implementation values (in Lucene, it is the doc freq). The builder allows to
35: * normalize this values. For example, to values between 0 and 1, 0 and 100, or
36: * any other range.
37: *
38: * @author kimchy
39: */
40: public interface CompassTermFreqsBuilder {
41:
42: public static final class Sort extends Parameter {
43:
44: private Sort(String name) {
45: super (name);
46: }
47:
48: /**
49: * Sort the terms based on their name
50: */
51: public static final Sort TERM = new Sort("TERM");
52:
53: /**
54: * Sort the terms based on their frequency (the default)
55: */
56: public static final Sort FREQ = new Sort("FREQ");
57: }
58:
59: /**
60: * Sets the size of the results that will be returned. The size will always
61: * contain the highest frequencies. Defaults to <code>10</code>.
62: */
63: CompassTermFreqsBuilder setSize(int size);
64:
65: /**
66: * Narrow down the terms to specific aliases (which in trun automatically map
67: * to a sub index).
68: */
69: CompassTermFreqsBuilder setAliases(String... aliases);
70:
71: /**
72: * Narrow down teh terms to specific classes (which map to aliases).
73: */
74: CompassTermFreqsBuilder setTypes(Class... types);
75:
76: /**
77: * Narrow down the terms to specific sub indexes.
78: */
79: CompassTermFreqsBuilder setSubIndexes(String... subIndexes);
80:
81: /**
82: * Sets the sorting direction of the size based results terms. Note, this is the
83: * sorting that will be perfomed on the terms of the highest frequencies based on
84: * the {@link #setSize(int)} setting.
85: */
86: CompassTermFreqsBuilder setSort(Sort sort);
87:
88: /**
89: * Normalizes the result frequencies based on the provided min and max values. For
90: * example, will normalize using 0 to 1 with the lowest frequency mapped to 0, the
91: * highest frequency mapped to 1, and the rest are distributed within.
92: */
93: CompassTermFreqsBuilder normalize(int min, int max);
94:
95: /**
96: * Builds and returns the term and their frequencies.
97: */
98: CompassTermFreq[] toTermFreqs() throws CompassException;
99: }
|