Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f9d82d6

Browse files
committed
heighlight begining
1 parent 8639bb9 commit f9d82d6

File tree

4 files changed

+115
-6
lines changed

4 files changed

+115
-6
lines changed

src/main/java/org/nlpcn/es4sql/domain/hints/HintFactory.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package org.nlpcn.es4sql.domain.hints;
22

3+
import org.elasticsearch.common.jackson.dataformat.yaml.YAMLFactory;
4+
import org.elasticsearch.common.jackson.dataformat.yaml.YAMLParser;
5+
import org.elasticsearch.common.xcontent.yaml.YamlXContentParser;
6+
import org.nlpcn.es4sql.exception.SqlParseException;
7+
8+
import java.io.IOException;
39
import java.util.ArrayList;
410
import java.util.List;
11+
import java.util.Map;
512

613
/**
714
* Created by Eliran on 5/9/2015.
815
*/
916
public class HintFactory {
1017

11-
public static Hint getHintFromString(String hintAsString){
18+
public static Hint getHintFromString(String hintAsString) throws SqlParseException {
1219
if(hintAsString.startsWith("! USE_NESTED_LOOPS") || hintAsString.startsWith("! USE_NL")){
1320
return new Hint(HintType.USE_NESTED_LOOPS,null);
1421
}
@@ -55,8 +62,28 @@ public static Hint getHintFromString(String hintAsString){
5562
return new Hint(HintType.DOCS_WITH_AGGREGATION,new Object[]{docsWithAggregation});
5663
}
5764
if(hintAsString.startsWith("! ROUTINGS")) {
58-
String[] hints = getParamsFromHint(hintAsString,"! ROUTINGS");
59-
return new Hint(HintType.ROUTINGS,hints);
65+
String[] routings = getParamsFromHint(hintAsString,"! ROUTINGS");
66+
return new Hint(HintType.ROUTINGS,routings);
67+
}
68+
if(hintAsString.startsWith("! HIGHLIGHT")) {
69+
String[] heighlights = getParamsFromHint(hintAsString,"! HIGHLIGHT");
70+
ArrayList hintParams = new ArrayList();
71+
hintParams.add(heighlights[0]);
72+
if(heighlights.length == 2){
73+
String heighlightParam = heighlights[1];
74+
heighlightParam = heighlightParam.replaceAll(" , ", "\n");
75+
YAMLFactory yamlFactory = new YAMLFactory();
76+
YAMLParser parser1 = null;
77+
try {
78+
parser1 = yamlFactory.createParser(heighlightParam.toCharArray());
79+
YamlXContentParser yamlXContentParser = new YamlXContentParser(parser1);
80+
Map<String, Object> map = yamlXContentParser.map();
81+
hintParams.add(map);
82+
} catch (IOException e) {
83+
throw new SqlParseException("could not parse heighlight hint: " + e.getMessage());
84+
}
85+
}
86+
return new Hint(HintType.HIGHLIGHT,hintParams.toArray());
6087
}
6188

6289
return null;

src/main/java/org/nlpcn/es4sql/domain/hints/HintType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ public enum HintType
1515
USE_SCROLL,
1616
IGNORE_UNAVAILABLE,
1717
DOCS_WITH_AGGREGATION,
18-
ROUTINGS;
18+
ROUTINGS,
19+
HIGHLIGHT;
1920
}

src/main/java/org/nlpcn/es4sql/parse/SqlParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ private void updateJoinLimit(MySqlSelectQueryBlock.Limit limit, JoinSelect joinS
484484
}
485485
}
486486

487-
private List<Hint> parseHints(List<SQLCommentHint> sqlHints) {
487+
private List<Hint> parseHints(List<SQLCommentHint> sqlHints) throws SqlParseException {
488488
List<Hint> hints = new ArrayList<>();
489489
for (SQLCommentHint sqlHint : sqlHints) {
490490
Hint hint = HintFactory.getHintFromString(sqlHint.getText());

src/main/java/org/nlpcn/es4sql/query/QueryAction.java

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
import org.elasticsearch.action.search.SearchRequestBuilder;
55
import org.elasticsearch.action.support.IndicesOptions;
66
import org.elasticsearch.client.Client;
7+
import org.elasticsearch.search.highlight.HighlightBuilder;
78
import org.nlpcn.es4sql.domain.Query;
89
import org.nlpcn.es4sql.domain.Select;
910
import org.nlpcn.es4sql.domain.hints.Hint;
1011
import org.nlpcn.es4sql.domain.hints.HintType;
1112
import org.nlpcn.es4sql.exception.SqlParseException;
1213

1314
import java.util.ArrayList;
15+
import java.util.Map;
1416

1517
/**
1618
* Abstract class. used to transform Select object (Represents SQL query) to
@@ -46,8 +48,87 @@ protected void updateRequestWithIndexAndRoutingOptions(Select select, SearchRequ
4648
}
4749

4850

51+
protected void updateRequestWithHighlight(Select select, SearchRequestBuilder request) {
4952

50-
/**
53+
//? here Map<String,Object> HEIGHLIGHT('field',JSON) ?
54+
55+
for(Hint hint : select.getHints()){
56+
if(hint.getType() == HintType.HIGHLIGHT){
57+
HighlightBuilder.Field highlightField = parseHeiglightField(hint.getParams());
58+
if(highlightField != null){
59+
request.addHighlightedField(highlightField);
60+
}
61+
}
62+
}
63+
}
64+
65+
protected HighlightBuilder.Field parseHeiglightField(Object[] params)
66+
{
67+
if(params == null || params.length == 0 || params.length > 2){
68+
//todo: exception.
69+
}
70+
HighlightBuilder.Field field = new HighlightBuilder.Field(params[0].toString());
71+
if(params.length == 1){
72+
return field;
73+
}
74+
Map<String,Object> heighlightParams = (Map<String,Object>) params[1];
75+
76+
for (Map.Entry<String,Object> param : heighlightParams.entrySet()){
77+
switch (param.getKey()){
78+
case "boundary_chars":
79+
//todo: array.
80+
field.boundaryChars((char[]) param.getValue());
81+
break;
82+
case "boundary_max_scan":
83+
field.boundaryMaxScan((Integer) param.getValue());
84+
break;
85+
case "force_source":
86+
field.forceSource((Boolean) param.getValue());
87+
break;
88+
case "fragmenter":
89+
field.fragmenter((String) param.getValue());
90+
break;
91+
case "fragment_offset":
92+
field.fragmentOffset((Integer) param.getValue());
93+
break;
94+
case "fragment_size":
95+
field.fragmentSize((Integer) param.getValue());
96+
break;
97+
case "highlight_filter":
98+
field.highlightFilter((Boolean) param.getValue());
99+
break;
100+
case "matched_fields":
101+
field.matchedFields((String[]) param.getValue());
102+
break;
103+
case "no_match_size":
104+
field.noMatchSize((Integer) param.getValue());
105+
break;
106+
case "num_of_fragments":
107+
field.numOfFragments((Integer) param.getValue());
108+
break;
109+
case "order":
110+
field.order((String) param.getValue());
111+
break;
112+
case "phrase_limit":
113+
field.phraseLimit((Integer) param.getValue());
114+
break;
115+
case "post_tags":
116+
field.postTags((String[]) param.getValue());
117+
break;
118+
case "pre_tags":
119+
field.preTags((String[]) param.getValue());
120+
break;
121+
case "require_field_match":
122+
field.requireFieldMatch((Boolean) param.getValue());
123+
break;
124+
125+
}
126+
}
127+
return field;
128+
}
129+
130+
131+
/**
51132
* Prepare the request, and return ES request.
52133
* @return ActionRequestBuilder (ES request)
53134
* @throws SqlParseException

0 commit comments

Comments
 (0)