001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.search.suggest;
016    
017    import com.liferay.portal.kernel.search.Query;
018    
019    import java.util.Collections;
020    import java.util.HashMap;
021    import java.util.HashSet;
022    import java.util.Map;
023    import java.util.Set;
024    
025    /**
026     * @author Michael C. Han
027     */
028    public class PhraseSuggester extends BaseSuggester {
029    
030            public PhraseSuggester(String name, String field) {
031                    super(name, field);
032            }
033    
034            public PhraseSuggester(String name, String field, String value) {
035                    super(name, field, value);
036            }
037    
038            @Override
039            public <T> T accept(SuggesterVisitor<T> suggesterVisitor) {
040                    return suggesterVisitor.visit(this);
041            }
042    
043            public void addCandidateGenerator(CandidateGenerator candidateGenerator) {
044                    _candidateGenerators.add(candidateGenerator);
045            }
046    
047            public String getAnalyzer() {
048                    return _analyzer;
049            }
050    
051            public Set<CandidateGenerator> getCandidateGenerators() {
052                    return Collections.unmodifiableSet(_candidateGenerators);
053            }
054    
055            public Collate getCollate() {
056                    return _collate;
057            }
058    
059            public Float getConfidence() {
060                    return _confidence;
061            }
062    
063            public Integer getGramSize() {
064                    return _gramSize;
065            }
066    
067            public Float getMaxErrors() {
068                    return _maxErrors;
069            }
070    
071            public String getPostHighlightFilter() {
072                    return _postHighlightFilter;
073            }
074    
075            public String getPreHighlightFilter() {
076                    return _preHighlightFilter;
077            }
078    
079            public Float getRealWordErrorLikelihood() {
080                    return _realWordErrorLikelihood;
081            }
082    
083            public String getSeparator() {
084                    return _separator;
085            }
086    
087            public Integer getShardSize() {
088                    return _shardSize;
089            }
090    
091            public Integer getSize() {
092                    return _size;
093            }
094    
095            public Integer getTokenLimit() {
096                    return _tokenLimit;
097            }
098    
099            public Boolean isForceUnigrams() {
100                    return _forceUnigrams;
101            }
102    
103            public void setAnalyzer(String analyzer) {
104                    _analyzer = analyzer;
105            }
106    
107            public void setCollate(Collate collate) {
108                    _collate = collate;
109            }
110    
111            public void setConfidence(Float confidence) {
112                    _confidence = confidence;
113            }
114    
115            public void setForceUnigrams(Boolean forceUnigrams) {
116                    _forceUnigrams = forceUnigrams;
117            }
118    
119            public void setGramSize(Integer gramSize) {
120                    _gramSize = gramSize;
121            }
122    
123            public void setMaxErrors(Float maxErrors) {
124                    _maxErrors = maxErrors;
125            }
126    
127            public void setPostHighlightFilter(String postHighlightFilter) {
128                    _postHighlightFilter = postHighlightFilter;
129            }
130    
131            public void setPreHighlightFilter(String preHighlightFilter) {
132                    _preHighlightFilter = preHighlightFilter;
133            }
134    
135            public void setRealWordErrorLikelihood(Float realWordErrorLikelihood) {
136                    _realWordErrorLikelihood = realWordErrorLikelihood;
137            }
138    
139            public void setSeparator(String separator) {
140                    _separator = separator;
141            }
142    
143            public void setShardSize(Integer shardSize) {
144                    _shardSize = shardSize;
145            }
146    
147            public void setSize(Integer size) {
148                    _size = size;
149            }
150    
151            public void setTokenLimit(Integer tokenLimit) {
152                    _tokenLimit = tokenLimit;
153            }
154    
155            public static class CandidateGenerator {
156    
157                    public CandidateGenerator(String field) {
158                            _field = field;
159                    }
160    
161                    @Override
162                    public boolean equals(Object object) {
163                            if (this == object) {
164                                    return true;
165                            }
166    
167                            if ((object == null) || (object.getClass() != getClass())) {
168                                    return false;
169                            }
170    
171                            CandidateGenerator candidateGenerator = (CandidateGenerator)object;
172    
173                            return _field.equals(candidateGenerator.getField());
174                    }
175    
176                    public Float getAccuracy() {
177                            return _accuracy;
178                    }
179    
180                    public String getField() {
181                            return _field;
182                    }
183    
184                    public Integer getMaxEdits() {
185                            return _maxEdits;
186                    }
187    
188                    public Integer getMaxExpansions() {
189                            return _maxExpansions;
190                    }
191    
192                    public Integer getMaxInspections() {
193                            return _maxInspections;
194                    }
195    
196                    public Integer getMaxTermFreq() {
197                            return _maxTermFreq;
198                    }
199    
200                    public Integer getMinDocFreq() {
201                            return _minDocFreq;
202                    }
203    
204                    public Integer getMinWordLength() {
205                            return _minWordLength;
206                    }
207    
208                    public String getPostFilterAnalyzer() {
209                            return _postFilterAnalyzer;
210                    }
211    
212                    public String getPreFilterAnalyzer() {
213                            return _preFilterAnalyzer;
214                    }
215    
216                    public Integer getPrefixLength() {
217                            return _prefixLength;
218                    }
219    
220                    public Integer getSize() {
221                            return _size;
222                    }
223    
224                    public Sort getSort() {
225                            return _sort;
226                    }
227    
228                    public StringDistance getStringDistance() {
229                            return _stringDistance;
230                    }
231    
232                    public SuggestMode getSuggestMode() {
233                            return _suggestMode;
234                    }
235    
236                    @Override
237                    public int hashCode() {
238                            return _field.hashCode();
239                    }
240    
241                    public void setAccuracy(Float accuracy) {
242                            _accuracy = accuracy;
243                    }
244    
245                    public void setMaxEdits(Integer maxEdits) {
246                            _maxEdits = maxEdits;
247                    }
248    
249                    public void setMaxExpansions(Integer maxExpansions) {
250                            _maxExpansions = maxExpansions;
251                    }
252    
253                    public void setMaxInspections(Integer maxInspections) {
254                            _maxInspections = maxInspections;
255                    }
256    
257                    public void setMaxTermFreq(Integer maxTermFreq) {
258                            _maxTermFreq = maxTermFreq;
259                    }
260    
261                    public void setMinDocFreq(Integer minDocFreq) {
262                            _minDocFreq = minDocFreq;
263                    }
264    
265                    public void setMinWordLength(Integer minWordLength) {
266                            _minWordLength = minWordLength;
267                    }
268    
269                    public void setPostFilterAnalyzer(String postFilterAnalyzer) {
270                            _postFilterAnalyzer = postFilterAnalyzer;
271                    }
272    
273                    public void setPreFilterAnalyzer(String preFilterAnalyzer) {
274                            _preFilterAnalyzer = preFilterAnalyzer;
275                    }
276    
277                    public void setPrefixLength(Integer prefixLength) {
278                            _prefixLength = prefixLength;
279                    }
280    
281                    public void setSize(Integer size) {
282                            _size = size;
283                    }
284    
285                    public void setSort(Sort sort) {
286                            _sort = sort;
287                    }
288    
289                    public void setStringDistance(StringDistance stringDistance) {
290                            _stringDistance = stringDistance;
291                    }
292    
293                    public void setSuggestMode(SuggestMode suggestMode) {
294                            _suggestMode = suggestMode;
295                    }
296    
297                    private Float _accuracy;
298                    private final String _field;
299                    private Integer _maxEdits;
300                    private Integer _maxExpansions;
301                    private Integer _maxInspections;
302                    private Integer _maxTermFreq;
303                    private Integer _minDocFreq;
304                    private Integer _minWordLength;
305                    private String _postFilterAnalyzer;
306                    private String _preFilterAnalyzer;
307                    private Integer _prefixLength;
308                    private Integer _size;
309                    private Sort _sort;
310                    private StringDistance _stringDistance;
311                    private SuggestMode _suggestMode;
312    
313            }
314    
315            public static class Collate {
316    
317                    public Collate(Query query) {
318                            _query = query;
319                    }
320    
321                    public void addParams(String key, Object value) {
322                            _params.put(key, value);
323                    }
324    
325                    public Map<String, Object> getParams() {
326                            return _params;
327                    }
328    
329                    public Query getQuery() {
330                            return _query;
331                    }
332    
333                    public Boolean isPrune() {
334                            return _prune;
335                    }
336    
337                    public void setPrune(Boolean prune) {
338                            _prune = prune;
339                    }
340    
341                    private final Map<String, Object> _params = new HashMap<>();
342                    private Boolean _prune;
343                    private final Query _query;
344    
345            }
346    
347            private String _analyzer;
348            private final Set<CandidateGenerator> _candidateGenerators =
349                    new HashSet<>();
350            private Collate _collate;
351            private Float _confidence;
352            private Boolean _forceUnigrams;
353            private Integer _gramSize;
354            private Float _maxErrors;
355            private String _postHighlightFilter;
356            private String _preHighlightFilter;
357            private Float _realWordErrorLikelihood;
358            private String _separator;
359            private Integer _shardSize;
360            private Integer _size;
361            private Integer _tokenLimit;
362    
363    }