summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/search/suggest/completion
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/suggest/completion')
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java29
1 files changed, 19 insertions, 10 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java
index a4aeec8cb5..b12b90de10 100644
--- a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java
+++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java
@@ -19,6 +19,7 @@
package org.elasticsearch.search.suggest.completion;
import org.apache.lucene.search.suggest.document.CompletionQuery;
+import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.mapper.CompletionFieldMapper;
import org.elasticsearch.index.query.QueryShardContext;
@@ -77,15 +78,7 @@ public class CompletionSuggestionContext extends SuggestionSearchContext.Suggest
CompletionFieldMapper.CompletionFieldType fieldType = getFieldType();
final CompletionQuery query;
if (getPrefix() != null) {
- if (fuzzyOptions != null) {
- query = fieldType.fuzzyQuery(getPrefix().utf8ToString(),
- Fuzziness.fromEdits(fuzzyOptions.getEditDistance()),
- fuzzyOptions.getFuzzyPrefixLength(), fuzzyOptions.getFuzzyMinLength(),
- fuzzyOptions.getMaxDeterminizedStates(), fuzzyOptions.isTranspositions(),
- fuzzyOptions.isUnicodeAware());
- } else {
- query = fieldType.prefixQuery(getPrefix());
- }
+ query = createCompletionQuery(getPrefix(), fieldType);
} else if (getRegex() != null) {
if (fuzzyOptions != null) {
throw new IllegalArgumentException("can not use 'fuzzy' options with 'regex");
@@ -95,8 +88,10 @@ public class CompletionSuggestionContext extends SuggestionSearchContext.Suggest
}
query = fieldType.regexpQuery(getRegex(), regexOptions.getFlagsValue(),
regexOptions.getMaxDeterminizedStates());
+ } else if (getText() != null) {
+ query = createCompletionQuery(getText(), fieldType);
} else {
- throw new IllegalArgumentException("'prefix' or 'regex' must be defined");
+ throw new IllegalArgumentException("'prefix/text' or 'regex' must be defined");
}
if (fieldType.hasContextMappings()) {
ContextMappings contextMappings = fieldType.getContextMappings();
@@ -105,4 +100,18 @@ public class CompletionSuggestionContext extends SuggestionSearchContext.Suggest
return query;
}
+ private CompletionQuery createCompletionQuery(BytesRef prefix, CompletionFieldMapper.CompletionFieldType fieldType) {
+ final CompletionQuery query;
+ if (fuzzyOptions != null) {
+ query = fieldType.fuzzyQuery(prefix.utf8ToString(),
+ Fuzziness.fromEdits(fuzzyOptions.getEditDistance()),
+ fuzzyOptions.getFuzzyPrefixLength(), fuzzyOptions.getFuzzyMinLength(),
+ fuzzyOptions.getMaxDeterminizedStates(), fuzzyOptions.isTranspositions(),
+ fuzzyOptions.isUnicodeAware());
+ } else {
+ query = fieldType.prefixQuery(prefix);
+ }
+ return query;
+ }
+
}