Skip to content

Commit 0f69172

Browse files
committed
Merge commit '9a55c03d4173c5fb6303b3276fd734533d707d44' into elastic2.0
Conflicts: src/test/java/org/nlpcn/es4sql/QueryTest.java
2 parents 2208bdc + 9a55c03 commit 0f69172

File tree

5 files changed

+64
-18
lines changed

5 files changed

+64
-18
lines changed

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,20 @@ public static Hint getHintFromString(String hintAsString) throws SqlParseExcepti
7373
String[] heighlights = getParamsFromHint(hintAsString,"! HIGHLIGHT");
7474
ArrayList hintParams = new ArrayList();
7575
hintParams.add(heighlights[0]);
76-
if(heighlights.length == 2){
77-
String heighlightParam = heighlights[1];
78-
heighlightParam = heighlightParam.replaceAll(" , ", "\n");
76+
if(heighlights.length > 1 ){
77+
StringBuilder builder = new StringBuilder();
78+
for(int i=1;i<heighlights.length;i++){
79+
if(i!=1){
80+
builder.append("\n");
81+
}
82+
builder.append(heighlights[i]);
83+
}
84+
String heighlightParam = builder.toString();
7985
YAMLFactory yamlFactory = new YAMLFactory();
80-
YAMLParser parser1 = null;
86+
YAMLParser yamlParser = null;
8187
try {
82-
parser1 = yamlFactory.createParser(heighlightParam.toCharArray());
83-
YamlXContentParser yamlXContentParser = new YamlXContentParser(parser1);
88+
yamlParser = yamlFactory.createParser(heighlightParam.toCharArray());
89+
YamlXContentParser yamlXContentParser = new YamlXContentParser(yamlParser);
8490
Map<String, Object> map = yamlXContentParser.map();
8591
hintParams.add(map);
8692
} catch (IOException e) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public SqlElasticSearchRequestBuilder explain() throws SqlParseException {
4747
request.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
4848
}
4949
updateRequestWithIndexAndRoutingOptions(select, request);
50+
updateRequestWithHighlight(select, request);
5051

5152
SqlElasticSearchRequestBuilder sqlElasticRequestBuilder = new SqlElasticSearchRequestBuilder(request);
5253

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

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.nlpcn.es4sql.query;
22

3-
import org.elasticsearch.action.ActionRequestBuilder;
43
import org.elasticsearch.action.search.SearchRequestBuilder;
54
import org.elasticsearch.action.support.IndicesOptions;
65
import org.elasticsearch.client.Client;
@@ -50,19 +49,17 @@ protected void updateRequestWithIndexAndRoutingOptions(Select select, SearchRequ
5049

5150
protected void updateRequestWithHighlight(Select select, SearchRequestBuilder request) {
5251

53-
//? here Map<String,Object> HEIGHLIGHT('field',JSON) ?
54-
5552
for(Hint hint : select.getHints()){
5653
if(hint.getType() == HintType.HIGHLIGHT){
57-
HighlightBuilder.Field highlightField = parseHeiglightField(hint.getParams());
54+
HighlightBuilder.Field highlightField = parseHighlightField(hint.getParams());
5855
if(highlightField != null){
5956
request.addHighlightedField(highlightField);
6057
}
6158
}
6259
}
6360
}
6461

65-
protected HighlightBuilder.Field parseHeiglightField(Object[] params)
62+
protected HighlightBuilder.Field parseHighlightField(Object[] params)
6663
{
6764
if(params == null || params.length == 0 || params.length > 2){
6865
//todo: exception.
@@ -71,13 +68,12 @@ protected HighlightBuilder.Field parseHeiglightField(Object[] params)
7168
if(params.length == 1){
7269
return field;
7370
}
74-
Map<String,Object> heighlightParams = (Map<String,Object>) params[1];
71+
Map<String,Object> highlightParams = (Map<String,Object>) params[1];
7572

76-
for (Map.Entry<String,Object> param : heighlightParams.entrySet()){
73+
for (Map.Entry<String,Object> param : highlightParams.entrySet()){
7774
switch (param.getKey()){
7875
case "boundary_chars":
79-
//todo: array.
80-
field.boundaryChars((char[]) param.getValue());
76+
field.boundaryChars(fromArrayListToCharArray((ArrayList) param.getValue()));
8177
break;
8278
case "boundary_max_scan":
8379
field.boundaryMaxScan((Integer) param.getValue());
@@ -98,7 +94,7 @@ protected HighlightBuilder.Field parseHeiglightField(Object[] params)
9894
field.highlightFilter((Boolean) param.getValue());
9995
break;
10096
case "matched_fields":
101-
field.matchedFields((String[]) param.getValue());
97+
field.matchedFields((String[]) ((ArrayList)param.getValue()).toArray(new String[((ArrayList) param.getValue()).size()]));
10298
break;
10399
case "no_match_size":
104100
field.noMatchSize((Integer) param.getValue());
@@ -113,10 +109,10 @@ protected HighlightBuilder.Field parseHeiglightField(Object[] params)
113109
field.phraseLimit((Integer) param.getValue());
114110
break;
115111
case "post_tags":
116-
field.postTags((String[]) param.getValue());
112+
field.postTags((String[]) ((ArrayList)param.getValue()).toArray(new String[((ArrayList) param.getValue()).size()]));
117113
break;
118114
case "pre_tags":
119-
field.preTags((String[]) param.getValue());
115+
field.preTags((String[]) ((ArrayList)param.getValue()).toArray(new String[((ArrayList) param.getValue()).size()]));
120116
break;
121117
case "require_field_match":
122118
field.requireFieldMatch((Boolean) param.getValue());
@@ -127,6 +123,16 @@ protected HighlightBuilder.Field parseHeiglightField(Object[] params)
127123
return field;
128124
}
129125

126+
private char[] fromArrayListToCharArray(ArrayList arrayList){
127+
char[] chars = new char[arrayList.size()];
128+
int i=0;
129+
for(Object item : arrayList){
130+
chars[i] = item.toString().charAt(0);
131+
i++;
132+
}
133+
return chars;
134+
}
135+
130136

131137
/**
132138
* Prepare the request, and return ES request.

src/test/java/org/nlpcn/es4sql/MainTestSuite.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public static void setUp() throws Exception {
6262
}
6363
loadBulk("src/test/resources/accounts.json");
6464
loadBulk("src/test/resources/online.json");
65+
preparePhrasesIndex();
6566
loadBulk("src/test/resources/phrases.json");
6667
loadBulk("src/test/resources/dogs.json");
6768
loadBulk("src/test/resources/peoples.json");
@@ -87,6 +88,19 @@ public static void setUp() throws Exception {
8788
System.out.println("Finished the setup process...");
8889
}
8990

91+
private static void preparePhrasesIndex() {
92+
String dataMapping = "{ \"phrase\": {" +
93+
" \"properties\": {\n" +
94+
" \"phrase\": {\n" +
95+
" \"type\": \"string\",\n" +
96+
" \"store\": true\n" +
97+
" }" +
98+
" }"+
99+
" }" +
100+
"}";
101+
client.admin().indices().preparePutMapping(TEST_INDEX).setType("phrase").setSource(dataMapping).execute().actionGet();
102+
}
103+
90104
private static void prepareNestedTypeIndex() {
91105

92106
String dataMapping = "{ \"nestedType\": {\n" +

src/test/java/org/nlpcn/es4sql/QueryTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@
88
import org.elasticsearch.index.IndexNotFoundException;
99
import org.elasticsearch.search.SearchHit;
1010
import org.elasticsearch.search.SearchHits;
11+
1112
import org.joda.time.DateTime;
1213
import org.joda.time.format.DateTimeFormat;
1314
import org.joda.time.format.DateTimeFormatter;
15+
16+
import org.elasticsearch.search.highlight.HighlightField;
17+
1418
import org.junit.Assert;
1519
import org.junit.Test;
1620
import org.nlpcn.es4sql.domain.Select;
@@ -859,6 +863,21 @@ public void routingRequestMultipleRountings() throws IOException, SqlParseExcept
859863
// }
860864

861865

866+
@Test
867+
public void highlightPreTagsAndPostTags() throws IOException, SqlParseException, SQLFeatureNotSupportedException{
868+
String query = String.format("select /*! HIGHLIGHT(phrase,pre_tags : ['<b>'], post_tags : ['</b>'] ) */ " +
869+
"* from %s/phrase " +
870+
"where phrase like 'fox' " +
871+
"order by _score",TEST_INDEX);
872+
SearchHits hits = query(query);
873+
for (SearchHit hit : hits){
874+
HighlightField phrase = hit.getHighlightFields().get("phrase");
875+
String highlightPhrase = phrase.getFragments()[0].string();
876+
Assert.assertTrue(highlightPhrase.contains("<b>fox</b>"));
877+
}
878+
879+
}
880+
862881
private SearchHits query(String query) throws SqlParseException, SQLFeatureNotSupportedException, SQLFeatureNotSupportedException {
863882
SearchDao searchDao = MainTestSuite.getSearchDao();
864883
SqlElasticSearchRequestBuilder select = (SqlElasticSearchRequestBuilder) searchDao.explain(query).explain();

0 commit comments

Comments
 (0)