#579 I18n for Suggest
This commit is contained in:
parent
7d5d7e494d
commit
35ec8ff079
7 changed files with 129 additions and 14 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)',
|
||||
|
|
|
@ -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)',
|
||||
|
|
|
@ -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)',
|
||||
|
|
|
@ -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; });
|
||||
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue