1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00

Replace SearchHitField with DocumentField

This commit is contained in:
dengchao@xgtl 2020-04-16 10:18:08 +08:00
parent 7bfe151a0e
commit 9aa378d4d0
2 changed files with 38 additions and 38 deletions

View File

@ -25,8 +25,8 @@ import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.document.DocumentField;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHitField;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.ElasticsearchException; import org.springframework.data.elasticsearch.ElasticsearchException;
@ -119,18 +119,18 @@ public class UKResultMapper extends AbstractResultMapper {
ScriptedField scriptedField = field.getAnnotation(ScriptedField.class); ScriptedField scriptedField = field.getAnnotation(ScriptedField.class);
if (scriptedField != null) { if (scriptedField != null) {
String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name(); String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name();
SearchHitField searchHitField = hit.getFields().get(name); DocumentField DocumentField = hit.getFields().get(name);
if (searchHitField != null) { if (DocumentField != null) {
field.setAccessible(true); field.setAccessible(true);
try { try {
if(name.equals("title") && hit.getHighlightFields().get("title")!=null){ if (name.equals("title") && hit.getHighlightFields().get("title") != null) {
field.set(result, hit.getHighlightFields().get("title").fragments()[0].string()); field.set(result, hit.getHighlightFields().get("title").fragments()[0].string());
}else{ } else {
field.set(result, searchHitField.getValue()); field.set(result, DocumentField.getValue());
} }
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new ElasticsearchException("failed to set scripted field: " + name + " with value: " throw new ElasticsearchException("failed to set scripted field: " + name + " with value: "
+ searchHitField.getValue(), e); + DocumentField.getValue(), e);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
throw new ElasticsearchException("failed to access scripted field: " + name, e); throw new ElasticsearchException("failed to access scripted field: " + name, e);
} }
@ -141,27 +141,27 @@ public class UKResultMapper extends AbstractResultMapper {
} }
public <T> T mapEntity(Collection<SearchHitField> values, SearchHit hit , Class<T> clazz) { public <T> T mapEntity(Collection<DocumentField> values, SearchHit hit, Class<T> clazz) {
return mapEntity(buildJSONFromFields(values) , hit , clazz); return mapEntity(buildJSONFromFields(values), hit, clazz);
} }
private String buildJSONFromFields(Collection<SearchHitField> values) { private String buildJSONFromFields(Collection<DocumentField> values) {
JsonFactory nodeFactory = new JsonFactory(); JsonFactory nodeFactory = new JsonFactory();
try { try {
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ByteArrayOutputStream stream = new ByteArrayOutputStream();
JsonGenerator generator = nodeFactory.createGenerator(stream, JsonEncoding.UTF8); JsonGenerator generator = nodeFactory.createGenerator(stream, JsonEncoding.UTF8);
generator.writeStartObject(); generator.writeStartObject();
for (SearchHitField value : values) { for (DocumentField value : values) {
if (value.getValues().size() > 1) { if (value.getValues().size() > 1) {
generator.writeArrayFieldStart(value.getName()); generator.writeArrayFieldStart(value.getName());
for (Object val : value.getValues()) { for (Object val : value.getValues()) {
generator.writeObject(val); generator.writeObject(val);
} }
generator.writeEndArray(); generator.writeEndArray();
} else { } else {
generator.writeObjectField(value.getName(), value.getValue()); generator.writeObjectField(value.getName(), value.getValue());
} }
} }
generator.writeEndObject(); generator.writeEndObject();
generator.flush(); generator.flush();
return new String(stream.toByteArray(), StandardCharsets.UTF_8); return new String(stream.toByteArray(), StandardCharsets.UTF_8);

View File

@ -25,8 +25,8 @@ import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.document.DocumentField;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHitField;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.ElasticsearchException; import org.springframework.data.elasticsearch.ElasticsearchException;
@ -119,18 +119,18 @@ public class XiaoEUKResultMapper extends AbstractResultMapper {
ScriptedField scriptedField = field.getAnnotation(ScriptedField.class); ScriptedField scriptedField = field.getAnnotation(ScriptedField.class);
if (scriptedField != null) { if (scriptedField != null) {
String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name(); String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name();
SearchHitField searchHitField = hit.getFields().get(name); DocumentField DocumentField = hit.getFields().get(name);
if (searchHitField != null) { if (DocumentField != null) {
field.setAccessible(true); field.setAccessible(true);
try { try {
if(name.equals("title") && hit.getHighlightFields().get("title")!=null){ if (name.equals("title") && hit.getHighlightFields().get("title") != null) {
field.set(result, hit.getHighlightFields().get("title").fragments()[0].string()); field.set(result, hit.getHighlightFields().get("title").fragments()[0].string());
}else{ } else {
field.set(result, searchHitField.getValue()); field.set(result, DocumentField.getValue());
} }
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new ElasticsearchException("failed to set scripted field: " + name + " with value: " throw new ElasticsearchException("failed to set scripted field: " + name + " with value: "
+ searchHitField.getValue(), e); + DocumentField.getValue(), e);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
throw new ElasticsearchException("failed to access scripted field: " + name, e); throw new ElasticsearchException("failed to access scripted field: " + name, e);
} }
@ -141,27 +141,27 @@ public class XiaoEUKResultMapper extends AbstractResultMapper {
} }
public <T> T mapEntity(Collection<SearchHitField> values, SearchHit hit , Class<T> clazz) { public <T> T mapEntity(Collection<DocumentField> values, SearchHit hit, Class<T> clazz) {
return mapEntity(buildJSONFromFields(values) , hit , clazz); return mapEntity(buildJSONFromFields(values), hit, clazz);
} }
private String buildJSONFromFields(Collection<SearchHitField> values) { private String buildJSONFromFields(Collection<DocumentField> values) {
JsonFactory nodeFactory = new JsonFactory(); JsonFactory nodeFactory = new JsonFactory();
try { try {
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ByteArrayOutputStream stream = new ByteArrayOutputStream();
JsonGenerator generator = nodeFactory.createGenerator(stream, JsonEncoding.UTF8); JsonGenerator generator = nodeFactory.createGenerator(stream, JsonEncoding.UTF8);
generator.writeStartObject(); generator.writeStartObject();
for (SearchHitField value : values) { for (DocumentField value : values) {
if (value.getValues().size() > 1) { if (value.getValues().size() > 1) {
generator.writeArrayFieldStart(value.getName()); generator.writeArrayFieldStart(value.getName());
for (Object val : value.getValues()) { for (Object val : value.getValues()) {
generator.writeObject(val); generator.writeObject(val);
} }
generator.writeEndArray(); generator.writeEndArray();
} else { } else {
generator.writeObjectField(value.getName(), value.getValue()); generator.writeObjectField(value.getName(), value.getValue());
} }
} }
generator.writeEndObject(); generator.writeEndObject();
generator.flush(); generator.flush();
return new String(stream.toByteArray(), StandardCharsets.UTF_8); return new String(stream.toByteArray(), StandardCharsets.UTF_8);