#579 I18n for Suggest

This commit is contained in:
yfujita 2016-08-01 18:37:17 +09:00
parent 7d5d7e494d
commit 35ec8ff079
7 changed files with 129 additions and 14 deletions

View file

@ -18,6 +18,8 @@ package org.codelibs.fess.api.suggest;
import static org.codelibs.core.stream.StreamUtil.stream;
import java.io.IOException;
import java.util.Locale;
import java.util.Map;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@ -28,6 +30,10 @@ import org.apache.commons.lang.StringUtils;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.fess.api.BaseApiManager;
import org.codelibs.fess.api.json.JsonApiManager;
import org.codelibs.fess.app.service.SearchService;
import org.codelibs.fess.entity.FacetInfo;
import org.codelibs.fess.entity.GeoInfo;
import org.codelibs.fess.entity.SearchRequestParams;
import org.codelibs.fess.helper.RoleQueryHelper;
import org.codelibs.fess.helper.SuggestHelper;
import org.codelibs.fess.suggest.entity.SuggestItem;
@ -57,17 +63,19 @@ public class SuggestApiManager extends BaseApiManager {
String errMsg = StringUtil.EMPTY;
final StringBuilder buf = new StringBuilder(255); // TODO replace response stream
final RoleQueryHelper roleQueryHelper = ComponentUtil.getRoleQueryHelper();
final SearchService searchService = ComponentUtil.getComponent(SearchService.class);
try {
final RequestParameter parameter = RequestParameter.parse(request);
final String[] langs = searchService.getLanguages(request, parameter);
final SuggestHelper suggestHelper = ComponentUtil.getSuggestHelper();
final SuggestRequestBuilder builder = suggestHelper.suggester().suggest();
builder.setQuery(parameter.getQuery());
stream(parameter.getFields()).of(stream -> stream.forEach(field -> builder.addField(field)));
roleQueryHelper.build().stream().forEach(role -> builder.addRole(role));
stream(parameter.getSuggestFields()).of(stream -> stream.forEach(builder::addField));
roleQueryHelper.build().stream().forEach(builder::addRole);
builder.setSize(parameter.getNum());
stream(langs).of(stream -> stream.forEach(builder::addLang));
builder.addKind(SuggestItem.Kind.USER.toString());
if (ComponentUtil.getFessConfig().isSuggestSearchLog()) {
@ -144,17 +152,20 @@ public class SuggestApiManager extends BaseApiManager {
JsonApiManager.writeJsonResponse(status, buf.toString(), errMsg);
}
protected static class RequestParameter {
protected static class RequestParameter implements SearchRequestParams {
private final String query;
private final String[] fields;
private final int num;
protected RequestParameter(final String query, final String[] fields, final int num) {
private HttpServletRequest request;
protected RequestParameter(final HttpServletRequest request, final String query, final String[] fields, final int num) {
this.query = query;
this.fields = fields;
this.num = num;
this.request = request;
}
protected static RequestParameter parse(final HttpServletRequest request) {
@ -175,19 +186,74 @@ public class SuggestApiManager extends BaseApiManager {
num = 10;
}
return new RequestParameter(query, fields, num);
return new RequestParameter(request, query, fields, num);
}
protected String getQuery() {
public String getQuery() {
return query;
}
protected String[] getFields() {
protected String[] getSuggestFields() {
return fields;
}
protected int getNum() {
return num;
}
@Override
public Map<String, String[]> getFields() {
throw new UnsupportedOperationException();
}
@Override
public String[] getLanguages() {
return getParamValueArray(request, "lang");
}
@Override
public GeoInfo getGeoInfo() {
throw new UnsupportedOperationException();
}
@Override
public FacetInfo getFacetInfo() {
throw new UnsupportedOperationException();
}
@Override
public String getSort() {
throw new UnsupportedOperationException();
}
@Override
public int getStartPosition() {
throw new UnsupportedOperationException();
}
@Override
public int getPageSize() {
throw new UnsupportedOperationException();
}
@Override
public boolean isAdministrativeAccess() {
return false;
}
@Override
public String[] getExtraQueries() {
throw new UnsupportedOperationException();
}
@Override
public Object getAttribute(String name) {
throw new UnsupportedOperationException();
}
@Override
public Locale getLocale() {
throw new UnsupportedOperationException();
}
}
}

View file

@ -127,10 +127,11 @@ public class SuggestHelper {
}
if (sb.length() > 0) {
final String[] langs = searchLog.getLanguages() == null ? new String[] {} : searchLog.getLanguages().split(",");
stream(searchLog.getRoles()).of(stream -> stream.forEach(role -> roles.add(role)));
if (fessConfig.isValidSearchLogPermissions(roles.toArray(new String[roles.size()]))) {
suggester.indexer().indexFromSearchWord(sb.toString(), fields.toArray(new String[fields.size()]),
tags.toArray(new String[tags.size()]), roles.toArray(new String[roles.size()]), 1);
tags.toArray(new String[tags.size()]), roles.toArray(new String[roles.size()]), 1, langs);
}
}
});

View file

@ -27,6 +27,45 @@
"type" : "custom",
"tokenizer" : "fess_japanese_normal",
"filter" : ["stopword_en_filter", "pos_filter", "content_length_filter", "limit_token_count_filter"]
},
"reading_analyzer_ja" : {
"type" : "custom",
"tokenizer" : "fess_japanese_normal",
"filter" : ["reading_form"]
},
"reading_term_analyzer_ja" : {
"type" : "custom",
"tokenizer" : "fess_japanese_normal"
},
"normalize_analyzer_ja" : {
"type" : "custom",
"tokenizer" : "keyword",
"char_filter" : ["mapping_char"],
"filter" : ["lowercase"]
},
"contents_analyzer_ja" : {
"type" : "custom",
"tokenizer" : "fess_japanese_normal",
"filter" : ["stopword_en_filter", "pos_filter", "content_length_filter", "limit_token_count_filter"]
},
"reading_analyzer_en" : {
"type" : "custom",
"tokenizer" : "standard"
},
"reading_term_analyzer_en" : {
"type" : "custom",
"tokenizer" : "standard"
},
"normalize_analyzer_en" : {
"type" : "custom",
"tokenizer" : "keyword",
"char_filter" : ["mapping_char"],
"filter" : ["lowercase"]
},
"contents_analyzer_en" : {
"type" : "custom",
"tokenizer" : "standard",
"filter" : ["stemmer_en_filter", "stopword_en_filter", "content_length_filter", "limit_token_count_filter"]
}
},
"char_filter" : {
@ -138,6 +177,10 @@
"limit_token_count_filter": {
"type": "limit",
"max_token_count": 10000
},
"stemmer_en_filter": {
"type": "stemmer",
"name": "english"
}
}
}

View file

@ -30,7 +30,8 @@ $(function(){
ajaxinfo: {
url: contextPath + '/suggest',
fn: '_default,content,title',
num: 10
num: 10,
lang: $('#langSearchOption').val()
},
boxCssInfo: {
border: '1px solid rgba(82, 168, 236, 0.5)',

View file

@ -26,7 +26,8 @@ $(function() {
ajaxinfo : {
url : contextPath + '/suggest',
fn : '_default,content,title',
num : 10
num : 10,
lang : $('#langSearchOption').val()
},
boxCssInfo : {
border : '1px solid rgba(82, 168, 236, 0.5)',

View file

@ -175,7 +175,8 @@ $(function() {
ajaxinfo : {
url : contextPath + '/suggest',
fn : '_default,content,title',
num : 10
num : 10,
lang : $('#langSearchOption').val()
},
boxCssInfo : {
border : '1px solid rgba(82, 168, 236, 0.5)',

View file

@ -104,8 +104,10 @@ $.fn.suggestor = function(setting) {
cache : false,
data:{ query: $textArea.val(),
fields: settingAjaxInfo.fn,
num: settingAjaxInfo.num * 2
}
num: settingAjaxInfo.num * 2,
lang: settingAjaxInfo.lang
},
traditional: true
}).done(function(obj) { suggestor.createAutoCompleteList(obj); }).fail(function(a,obj,b) { suggestingSts=false; return; });
},