update suggester
This commit is contained in:
parent
17b76c9cf5
commit
c8c160c5b5
11 changed files with 258 additions and 237 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -13,3 +13,5 @@
|
|||
/src/main/webapp/WEB-INF/db/*.lock.db
|
||||
/src/main/webapp/WEB-INF/logs/fess*
|
||||
.classpath
|
||||
*.iml
|
||||
.idea
|
||||
|
|
2
pom.xml
2
pom.xml
|
@ -432,7 +432,7 @@
|
|||
<dependency>
|
||||
<groupId>jp.sf.fess</groupId>
|
||||
<artifactId>fess-suggest</artifactId>
|
||||
<version>1.0.2</version>
|
||||
<version>1.1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jp.sf.fess</groupId>
|
||||
|
|
|
@ -26,6 +26,7 @@ import java.net.URLDecoder;
|
|||
import java.sql.Timestamp;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
@ -64,7 +65,6 @@ import jp.sf.fess.screenshot.ScreenShotManager;
|
|||
import jp.sf.fess.service.FavoriteLogService;
|
||||
import jp.sf.fess.service.SearchService;
|
||||
import jp.sf.fess.suggest.Suggester;
|
||||
import jp.sf.fess.suggest.SuggesterManager;
|
||||
import jp.sf.fess.util.FacetResponse;
|
||||
import jp.sf.fess.util.MoreLikeThisResponse;
|
||||
import jp.sf.fess.util.QueryResponseList;
|
||||
|
@ -145,7 +145,7 @@ public class IndexAction {
|
|||
protected OpenSearchHelper openSearchHelper;
|
||||
|
||||
@Resource
|
||||
protected SuggesterManager suggesterManager;
|
||||
protected Suggester suggester;
|
||||
|
||||
@Resource
|
||||
protected DynamicProperties crawlerProperties;
|
||||
|
@ -481,30 +481,31 @@ public class IndexAction {
|
|||
}
|
||||
|
||||
final String[] fieldNames = indexForm.fn;
|
||||
final String[] labels = indexForm.fields.get("label");
|
||||
|
||||
final List<SuggestResponse> suggestResultList = new ArrayList<SuggestResponse>();
|
||||
WebApiUtil.setObject("suggestResultList", suggestResultList);
|
||||
final List<String> suggestFieldName = new ArrayList<String>();
|
||||
|
||||
final List<String> suggestFieldName = Arrays.asList(fieldNames);
|
||||
WebApiUtil.setObject("suggestFieldName", suggestFieldName);
|
||||
int suggestRecordCount = 0;
|
||||
|
||||
final List<String> labelList;
|
||||
if (labels == null) {
|
||||
labelList = new ArrayList<String>();
|
||||
} else {
|
||||
labelList = Arrays.asList(labels);
|
||||
}
|
||||
|
||||
try {
|
||||
for (final String fn : fieldNames) {
|
||||
final Suggester suggester = suggesterManager.getSuggester(fn);
|
||||
if (suggester != null) {
|
||||
final String suggestQuery = suggester
|
||||
.convertQuery(indexForm.query);
|
||||
final SuggestResponse suggestResponse = searchService
|
||||
.getSuggestResponse(fn, suggestQuery, num);
|
||||
final SuggestResponse suggestResponse = searchService
|
||||
.getSuggestResponse(indexForm.query, suggestFieldName,
|
||||
labelList, num);
|
||||
|
||||
if (!suggestResponse.isEmpty()) {
|
||||
suggestRecordCount += suggestResponse.size();
|
||||
|
||||
suggestResultList.add(suggestResponse);
|
||||
suggestFieldName.add(fn);
|
||||
}
|
||||
}
|
||||
if (!suggestResponse.isEmpty()) {
|
||||
suggestResultList.add(suggestResponse);
|
||||
}
|
||||
WebApiUtil.setObject("suggestRecordCount", suggestRecordCount);
|
||||
|
||||
WebApiUtil.setObject("suggestRecordCount", 1);
|
||||
} catch (final Exception e) {
|
||||
WebApiUtil.setError(1, e);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ package jp.sf.fess.api;
|
|||
|
||||
import jp.sf.fess.helper.LabelTypeHelper;
|
||||
import jp.sf.fess.helper.QueryHelper;
|
||||
import jp.sf.fess.suggest.SuggesterManager;
|
||||
|
||||
import org.codelibs.core.util.DynamicProperties;
|
||||
import org.seasar.framework.container.SingletonS2Container;
|
||||
|
@ -80,8 +79,4 @@ public class BaseApiManager {
|
|||
protected LabelTypeHelper getLabelTypeHelper() {
|
||||
return SingletonS2Container.getComponent("labelTypeHelper");
|
||||
}
|
||||
|
||||
protected SuggesterManager getSuggesterManager() {
|
||||
return SingletonS2Container.getComponent("suggesterManager");
|
||||
}
|
||||
}
|
|
@ -38,7 +38,6 @@ import jp.sf.fess.db.allcommon.CDef;
|
|||
import jp.sf.fess.entity.FieldAnalysisResponse;
|
||||
import jp.sf.fess.entity.SuggestResponse;
|
||||
import jp.sf.fess.entity.SuggestResponse.SuggestResponseList;
|
||||
import jp.sf.fess.suggest.Suggester;
|
||||
import jp.sf.fess.util.FacetResponse;
|
||||
import jp.sf.fess.util.FacetResponse.Field;
|
||||
import jp.sf.fess.util.MoreLikeThisResponse;
|
||||
|
@ -370,42 +369,37 @@ public class JsonApiManager extends BaseApiManager implements WebApiManager {
|
|||
for (final Map.Entry<String, List<String>> entry : suggestResponse
|
||||
.entrySet()) {
|
||||
final String fn = suggestFieldName.get(i);
|
||||
final Suggester suggester = getSuggesterManager()
|
||||
.getSuggester(fn);
|
||||
if (suggester != null) {
|
||||
if (!first1) {
|
||||
if (!first1) {
|
||||
buf.append(',');
|
||||
} else {
|
||||
first1 = false;
|
||||
}
|
||||
|
||||
final SuggestResponseList srList = (SuggestResponseList) entry
|
||||
.getValue();
|
||||
|
||||
buf.append("{\"token\":");
|
||||
buf.append(escapeJson(entry.getKey()));
|
||||
buf.append(", \"fn\":");
|
||||
buf.append(escapeJson(fn));
|
||||
buf.append(", \"startOffset\":");
|
||||
buf.append(Integer.toString(srList.getStartOffset()));
|
||||
buf.append(", \"endOffset\":");
|
||||
buf.append(Integer.toString(srList.getEndOffset()));
|
||||
buf.append(", \"numFound\":");
|
||||
buf.append(Integer.toString(srList.getNumFound()));
|
||||
buf.append(", ");
|
||||
buf.append("\"result\":[");
|
||||
boolean first2 = true;
|
||||
for (final String value : srList) {
|
||||
if (!first2) {
|
||||
buf.append(',');
|
||||
} else {
|
||||
first1 = false;
|
||||
first2 = false;
|
||||
}
|
||||
|
||||
final SuggestResponseList srList = (SuggestResponseList) entry
|
||||
.getValue();
|
||||
|
||||
buf.append("{\"token\":");
|
||||
buf.append(escapeJson(entry.getKey()));
|
||||
buf.append(", \"fn\":");
|
||||
buf.append(escapeJson(fn));
|
||||
buf.append(", \"startOffset\":");
|
||||
buf.append(Integer.toString(srList.getStartOffset()));
|
||||
buf.append(", \"endOffset\":");
|
||||
buf.append(Integer.toString(srList.getEndOffset()));
|
||||
buf.append(", \"numFound\":");
|
||||
buf.append(Integer.toString(srList.getNumFound()));
|
||||
buf.append(", ");
|
||||
buf.append("\"result\":[");
|
||||
boolean first2 = true;
|
||||
for (final String value : srList) {
|
||||
if (!first2) {
|
||||
buf.append(',');
|
||||
} else {
|
||||
first2 = false;
|
||||
}
|
||||
buf.append(escapeJson(suggester
|
||||
.convertResultString(value)));
|
||||
}
|
||||
buf.append("]}");
|
||||
buf.append(escapeJson(value));
|
||||
}
|
||||
buf.append("]}");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ import jp.sf.fess.db.allcommon.CDef;
|
|||
import jp.sf.fess.entity.FieldAnalysisResponse;
|
||||
import jp.sf.fess.entity.SuggestResponse;
|
||||
import jp.sf.fess.entity.SuggestResponse.SuggestResponseList;
|
||||
import jp.sf.fess.suggest.Suggester;
|
||||
import jp.sf.fess.util.FacetResponse;
|
||||
import jp.sf.fess.util.FacetResponse.Field;
|
||||
import jp.sf.fess.util.MoreLikeThisResponse;
|
||||
|
@ -318,38 +317,34 @@ public class XmlApiManager extends BaseApiManager implements WebApiManager {
|
|||
final SuggestResponseList srList = (SuggestResponseList) entry
|
||||
.getValue();
|
||||
final String fn = suggestFieldName.get(i);
|
||||
final Suggester suggester = getSuggesterManager()
|
||||
.getSuggester(fn);
|
||||
if (suggester != null) {
|
||||
buf.append("<suggest>");
|
||||
buf.append("<token>");
|
||||
buf.append(escapeXml(entry.getKey()));
|
||||
buf.append("</token>");
|
||||
buf.append("<fn>");
|
||||
buf.append(escapeXml(fn));
|
||||
buf.append("</fn>");
|
||||
buf.append("<start-offset>");
|
||||
buf.append(escapeXml(Integer.toString(srList
|
||||
.getStartOffset())));
|
||||
buf.append("</start-offset>");
|
||||
buf.append("<end-offset>");
|
||||
buf.append(escapeXml(Integer.toString(srList
|
||||
.getEndOffset())));
|
||||
buf.append("</end-offset>");
|
||||
buf.append("<num-found>");
|
||||
buf.append(escapeXml(Integer.toString(srList
|
||||
.getNumFound())));
|
||||
buf.append("</num-found>");
|
||||
buf.append("<result>");
|
||||
for (final String value : srList) {
|
||||
buf.append("<value>");
|
||||
buf.append(escapeXml(suggester
|
||||
.convertResultString(value)));
|
||||
buf.append("</value>");
|
||||
}
|
||||
buf.append("</result>");
|
||||
buf.append("</suggest>");
|
||||
buf.append("<suggest>");
|
||||
buf.append("<token>");
|
||||
buf.append(escapeXml(entry.getKey()));
|
||||
buf.append("</token>");
|
||||
buf.append("<fn>");
|
||||
buf.append(escapeXml(fn));
|
||||
buf.append("</fn>");
|
||||
buf.append("<start-offset>");
|
||||
buf.append(escapeXml(Integer.toString(srList
|
||||
.getStartOffset())));
|
||||
buf.append("</start-offset>");
|
||||
buf.append("<end-offset>");
|
||||
buf.append(escapeXml(Integer.toString(srList
|
||||
.getEndOffset())));
|
||||
buf.append("</end-offset>");
|
||||
buf.append("<num-found>");
|
||||
buf.append(escapeXml(Integer.toString(srList
|
||||
.getNumFound())));
|
||||
buf.append("</num-found>");
|
||||
buf.append("<result>");
|
||||
for (final String value : srList) {
|
||||
buf.append("<value>");
|
||||
buf.append(escapeXml(value));
|
||||
buf.append("</value>");
|
||||
}
|
||||
buf.append("</result>");
|
||||
buf.append("</suggest>");
|
||||
|
||||
}
|
||||
}
|
||||
buf.append("</result>");
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package jp.sf.fess.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
|
@ -25,9 +26,12 @@ import java.util.ListIterator;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import jp.sf.fess.suggest.SuggestConstants;
|
||||
|
||||
import org.apache.solr.client.solrj.response.QueryResponse;
|
||||
import org.apache.solr.client.solrj.response.SpellCheckResponse;
|
||||
import org.apache.solr.client.solrj.response.SpellCheckResponse.Suggestion;
|
||||
import org.apache.solr.common.SolrDocument;
|
||||
import org.apache.solr.common.SolrDocumentList;
|
||||
|
||||
public class SuggestResponse implements Map<String, List<String>> {
|
||||
protected String searchQuery;
|
||||
|
@ -36,15 +40,11 @@ public class SuggestResponse implements Map<String, List<String>> {
|
|||
|
||||
private final Map<String, List<String>> parent = new LinkedHashMap<String, List<String>>();
|
||||
|
||||
public SuggestResponse(final QueryResponse queryResponse) {
|
||||
public SuggestResponse(final QueryResponse queryResponse, final int num,
|
||||
final String query) {
|
||||
if (queryResponse != null) {
|
||||
final SpellCheckResponse spellCheckResponse = queryResponse
|
||||
.getSpellCheckResponse();
|
||||
for (final Map.Entry<String, Suggestion> entry : spellCheckResponse
|
||||
.getSuggestionMap().entrySet()) {
|
||||
parent.put(entry.getKey(),
|
||||
new SuggestResponseList(entry.getValue()));
|
||||
}
|
||||
parent.put(query, new SuggestResponseList(queryResponse, query));
|
||||
setSearchQuery(query);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -139,6 +139,30 @@ public class SuggestResponse implements Map<String, List<String>> {
|
|||
|
||||
private final int numFound;
|
||||
|
||||
public SuggestResponseList(final QueryResponse queryResponse,
|
||||
final String query) {
|
||||
final List<String> valueList = new ArrayList<String>();
|
||||
final List<Integer> frequencyList = new ArrayList<Integer>();
|
||||
final SolrDocumentList sdList = queryResponse.getResults();
|
||||
for (final SolrDocument sd : sdList) {
|
||||
final Object text = sd
|
||||
.getFieldValue(SuggestConstants.SuggestFieldNames.TEXT);
|
||||
final Object freq = sd
|
||||
.getFieldValue(SuggestConstants.SuggestFieldNames.COUNT);
|
||||
if (text != null && freq != null) {
|
||||
valueList.add(text.toString());
|
||||
frequencyList.add(Integer.parseInt(freq.toString()));
|
||||
}
|
||||
}
|
||||
parent = valueList;
|
||||
frequencies = frequencyList;
|
||||
frequency = 1;
|
||||
token = query;
|
||||
startOffset = 0;
|
||||
endOffset = query.length();
|
||||
numFound = (int) queryResponse.getResults().getNumFound();
|
||||
}
|
||||
|
||||
public SuggestResponseList(final Suggestion suggestion) {
|
||||
parent = suggestion.getAlternatives();
|
||||
if (parent == null) {
|
||||
|
|
|
@ -63,8 +63,6 @@ public interface QueryHelper {
|
|||
|
||||
String getMoreLikeThisField(String[] field);
|
||||
|
||||
String getSuggestQueryType(String fieldName);
|
||||
|
||||
boolean isAnalysisFieldName(String fieldName);
|
||||
|
||||
FacetInfo getDefaultFacetInfo();
|
||||
|
|
|
@ -138,8 +138,6 @@ public class QueryHelperImpl implements QueryHelper, Serializable {
|
|||
|
||||
protected String highlightingPrefix = "hl_";
|
||||
|
||||
protected String suggestPath = "/suggest/";
|
||||
|
||||
protected String minimumShouldMatch = "100%";
|
||||
|
||||
protected FacetInfo defaultFacetInfo;
|
||||
|
@ -1357,24 +1355,6 @@ public class QueryHelperImpl implements QueryHelper, Serializable {
|
|||
return StringUtils.join(list, ',');
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSuggestQueryType(final String fieldName) {
|
||||
for (final String supported : supportedSuggestFields) {
|
||||
if (supported.equals(fieldName)) {
|
||||
return suggestPath + fieldName;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getSuggestPath() {
|
||||
return suggestPath;
|
||||
}
|
||||
|
||||
public void setSuggestPath(final String suggestPath) {
|
||||
this.suggestPath = suggestPath;
|
||||
}
|
||||
|
||||
public String getMinimumShouldMatch() {
|
||||
return minimumShouldMatch;
|
||||
}
|
||||
|
|
|
@ -36,13 +36,14 @@ import jp.sf.fess.entity.SearchQuery.SortField;
|
|||
import jp.sf.fess.entity.SuggestResponse;
|
||||
import jp.sf.fess.helper.QueryHelper;
|
||||
import jp.sf.fess.solr.FessSolrQueryException;
|
||||
import jp.sf.fess.suggest.SuggestConstants;
|
||||
import jp.sf.fess.suggest.Suggester;
|
||||
import jp.sf.fess.util.QueryResponseList;
|
||||
|
||||
import org.apache.solr.client.solrj.SolrQuery;
|
||||
import org.apache.solr.client.solrj.SolrRequest;
|
||||
import org.apache.solr.client.solrj.request.FieldAnalysisRequest;
|
||||
import org.apache.solr.client.solrj.response.QueryResponse;
|
||||
import org.apache.solr.common.params.CommonParams;
|
||||
import org.apache.solr.common.util.NamedList;
|
||||
import org.codelibs.solr.lib.SolrGroup;
|
||||
import org.codelibs.solr.lib.SolrGroupManager;
|
||||
|
@ -57,9 +58,15 @@ public class SearchService implements Serializable {
|
|||
@Resource
|
||||
protected SolrGroupManager solrGroupManager;
|
||||
|
||||
@Resource
|
||||
SolrGroup suggestSolrGroup;
|
||||
|
||||
@Resource
|
||||
protected QueryHelper queryHelper;
|
||||
|
||||
@Resource
|
||||
protected Suggester suggester;
|
||||
|
||||
public Map<String, Object> getDocument(final String query) {
|
||||
final List<Map<String, Object>> docList = getDocumentList(query, 0, 1,
|
||||
null, null, null);
|
||||
|
@ -250,42 +257,36 @@ public class SearchService implements Serializable {
|
|||
return queryResponseList;
|
||||
}
|
||||
|
||||
public SuggestResponse getSuggestResponse(final String fieldName,
|
||||
final String q, final int rows) {
|
||||
public SuggestResponse getSuggestResponse(final String q,
|
||||
final List<String> fieldNames, final List<String> labels,
|
||||
final int rows) {
|
||||
|
||||
final String qt = queryHelper.getSuggestQueryType(fieldName);
|
||||
if (qt == null) {
|
||||
throw new FessSolrQueryException("EFESS0001",
|
||||
new Object[] { fieldName });
|
||||
}
|
||||
final String suggestQuery = suggester.buildSuggestQuery(q, fieldNames,
|
||||
labels);
|
||||
|
||||
final long startTime = System.currentTimeMillis();
|
||||
|
||||
final SolrGroup solrGroup = solrGroupManager
|
||||
.getSolrGroup(QueryType.QUERY);
|
||||
|
||||
QueryResponse queryResponse = null;
|
||||
final SolrQuery solrQuery = new SolrQuery();
|
||||
if (StringUtil.isNotBlank(q)) {
|
||||
if (StringUtil.isNotBlank(suggestQuery)) {
|
||||
// query
|
||||
solrQuery.setQuery(q);
|
||||
// path
|
||||
solrQuery.setParam(CommonParams.QT, qt);
|
||||
solrQuery.setQuery(suggestQuery);
|
||||
// size
|
||||
solrQuery.set("spellcheck.count", rows);
|
||||
solrQuery.setRows(rows);
|
||||
//sort
|
||||
solrQuery.setSort(SuggestConstants.SuggestFieldNames.COUNT,
|
||||
SolrQuery.ORDER.desc);
|
||||
|
||||
if (queryHelper.getTimeAllowed() >= 0) {
|
||||
solrQuery.setTimeAllowed(queryHelper.getTimeAllowed());
|
||||
}
|
||||
|
||||
queryResponse = solrGroup.query(solrQuery, SolrRequest.METHOD.POST);
|
||||
|
||||
queryResponse = suggestSolrGroup.query(solrQuery,
|
||||
SolrRequest.METHOD.POST);
|
||||
}
|
||||
final long execTime = System.currentTimeMillis() - startTime;
|
||||
|
||||
final SuggestResponse suggestResponse = new SuggestResponse(
|
||||
queryResponse);
|
||||
suggestResponse.setSearchQuery(q);
|
||||
queryResponse, rows, q);
|
||||
suggestResponse.setExecTime(execTime);
|
||||
return suggestResponse;
|
||||
}
|
||||
|
|
|
@ -1,111 +1,142 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
|
||||
"http://www.seasar.org/dtd/components24.dtd">
|
||||
<components>
|
||||
<!-- Manager -->
|
||||
<component name="suggesterManager" class="jp.sf.fess.suggest.SuggesterManager">
|
||||
<initMethod name="addSuggester">
|
||||
<arg>"content"</arg>
|
||||
<arg>contentSuggester</arg>
|
||||
<components>
|
||||
<component name="suggestIntegrateConverter" class="jp.sf.fess.suggest.converter.SuggestIntegrateConverter">
|
||||
<initMethod name="addConverter">
|
||||
<arg>
|
||||
<component name="alphabetConverter" class="jp.sf.fess.suggest.converter.AlphabetConverter" />
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addSuggester">
|
||||
<arg>"content_ja"</arg>
|
||||
<arg>contentJaSuggester</arg>
|
||||
<initMethod name="start"/>
|
||||
</component>
|
||||
<component name="suggestIntegrateNormalizer" class="jp.sf.fess.suggest.normalizer.SuggestIntegrateNormalizer">
|
||||
<initMethod name="addNormalizer">
|
||||
<arg>
|
||||
<component name="fullWidthToHalfWidthAlphabetNormalizer" class="jp.sf.fess.suggest.normalizer.FullWidthToHalfWidthAlphabetNormalizer" />
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addSuggester">
|
||||
<arg>"content_ts"</arg>
|
||||
<arg>contentTsSuggester</arg>
|
||||
<initMethod name="addNormalizer">
|
||||
<arg>
|
||||
<component name="icuNormalizer" class="jp.sf.fess.suggest.normalizer.ICUNormalizer">
|
||||
<property name="transliteratorId">"Any-Lower"</property>
|
||||
</component>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addSuggester">
|
||||
<arg>"title_ss"</arg>
|
||||
<arg>titleSsSuggester</arg>
|
||||
<initMethod name="start"/>
|
||||
</component>
|
||||
|
||||
<component name="suggester" class="jp.sf.fess.suggest.Suggester">
|
||||
<initMethod name="setConverter">
|
||||
<arg>suggestIntegrateConverter</arg>
|
||||
</initMethod>
|
||||
<initMethod name="setNormalizer">
|
||||
<arg>suggestIntegrateNormalizer</arg>
|
||||
</initMethod>
|
||||
</component>
|
||||
<!-- Suggester -->
|
||||
<component name="contentSuggester" class="jp.sf.fess.suggest.Suggester">
|
||||
<!-- TODO -->
|
||||
|
||||
|
||||
<!-- Solr Group Configuration -->
|
||||
<component name="suggestSolrProperties" class="org.codelibs.core.util.DynamicProperties">
|
||||
<arg>
|
||||
@jp.sf.fess.util.ResourceUtil@getConfPath("solr-suggest.properties")
|
||||
</arg>
|
||||
</component>
|
||||
<component name="contentJaSuggester" class="jp.sf.fess.suggest.Suggester">
|
||||
<!-- TODO -->
|
||||
<component name="suggestSolrGroupProperties" class="org.codelibs.core.util.DynamicProperties">
|
||||
<arg>
|
||||
@jp.sf.fess.util.ResourceUtil@getConfPath("suggestSolrGroup.properties")
|
||||
</arg>
|
||||
</component>
|
||||
<component name="contentTsSuggester" class="jp.sf.fess.suggest.Suggester">
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.ICUConverter">
|
||||
<arg>"Fullwidth-Halfwidth"</arg>
|
||||
</component>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.ICUConverter">
|
||||
<arg>"Any-Lower"</arg>
|
||||
</component>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.NormalizeConverter"/>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg><component class="jp.sf.fess.suggest.converter.ReadingConverter"/></arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.SymbolConverter">
|
||||
<initMethod name="addSymbol">
|
||||
<arg>new String[]{ "0",
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4",
|
||||
"5", "6", "7", "8", "9", " ", " ", "【", "】", "・", "(", ")",
|
||||
"(", ")", "%", "%", "~", "+", "#", "#", "\"", "”", "\'", "\\", "¥",
|
||||
"[", "]", "「", "」", "『", "』", "<", ">", "<", ">", "/", "/", "{",
|
||||
"}", "&", "&", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ",
|
||||
"ⅰ", "ⅱ", "ⅲ", "ⅳ", "ⅴ", "ⅵ", "ⅶ", "ⅷ", "ⅸ", "ⅹ", "-", "-", "." }
|
||||
</arg>
|
||||
</initMethod>
|
||||
</component>
|
||||
</arg>
|
||||
|
||||
|
||||
<component name="suggestSolrGroup" class="org.codelibs.solr.lib.SolrGroup">
|
||||
<!-- Note: groupName cannot include ".". -->
|
||||
<property name="groupName">"suggestSolrServer"</property>
|
||||
<property name="statusPolicy">
|
||||
<component class="jp.sf.fess.solr.policy.FessStatusPolicy">
|
||||
<property name="solrGroupProperties">suggestSolrGroupProperties</property>
|
||||
<property name="minSelectServer">1</property>
|
||||
<property name="minUpdateServer">1</property>
|
||||
<property name="retrySelectQueryInterval">500</property>
|
||||
<property name="retryUpdateQueryInterval">500</property>
|
||||
<property name="maxErrorCount">3</property>
|
||||
<property name="maxRetryUpdateQueryCount">3</property>
|
||||
<property name="maxRetrySelectQueryCount">3</property>
|
||||
</component>
|
||||
</property>
|
||||
<initMethod name="addServer">
|
||||
<!-- Note: the server name cannot include ".". -->
|
||||
<arg>"suggestSolrServer"</arg><!-- Group Name -->
|
||||
<arg>suggestSolrServer</arg><!-- Solr Server -->
|
||||
</initMethod>
|
||||
</component>
|
||||
<component name="titleSsSuggester" class="jp.sf.fess.suggest.Suggester">
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.ICUConverter">
|
||||
<arg>"Fullwidth-Halfwidth"</arg>
|
||||
</component>
|
||||
</arg>
|
||||
|
||||
<component name="clientConnectionManager" class="org.apache.http.impl.conn.PoolingClientConnectionManager">
|
||||
<arg>
|
||||
<component class="org.apache.http.conn.scheme.SchemeRegistry">
|
||||
<initMethod name="register">
|
||||
<arg>
|
||||
<component class="org.apache.http.conn.scheme.Scheme">
|
||||
<arg>"http"</arg>
|
||||
<arg>80</arg>
|
||||
<arg>@org.apache.http.conn.scheme.PlainSocketFactory@getSocketFactory()</arg>
|
||||
</component>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="register">
|
||||
<arg>
|
||||
<component class="org.apache.http.conn.scheme.Scheme">
|
||||
<arg>"https"</arg>
|
||||
<arg>443</arg>
|
||||
<arg>@org.apache.http.conn.ssl.SSLSocketFactory@getSocketFactory()</arg>
|
||||
</component>
|
||||
</arg>
|
||||
</initMethod>
|
||||
</component>
|
||||
</arg>
|
||||
<arg>10</arg><!-- timeToLive -->
|
||||
<arg>@java.util.concurrent.TimeUnit@MINUTES</arg><!-- tunit -->
|
||||
<property name="maxTotal">50</property>
|
||||
<property name="defaultMaxPerRoute">2</property>
|
||||
<destroyMethod name="shutdown"></destroyMethod>
|
||||
</component>
|
||||
<component name="connectionMonitorTarget" class="org.seasar.robot.client.http.HcConnectionMonitorTarget">
|
||||
<arg>clientConnectionManager</arg>
|
||||
<arg>300000</arg>
|
||||
</component>
|
||||
<component name="connectionMonitorTask">
|
||||
@org.seasar.extension.timer.TimeoutManager@getInstance()
|
||||
.addTimeoutTarget(
|
||||
connectionMonitorTarget,
|
||||
10,
|
||||
true)
|
||||
<destroyMethod name="cancel"></destroyMethod>
|
||||
</component>
|
||||
|
||||
<!-- Solr Server Configuration -->
|
||||
<component name="suggestInterceptor" class="org.codelibs.solr.lib.server.interceptor.PreemptiveAuthInterceptor">
|
||||
</component>
|
||||
<component name="suggestCredentials" class="org.apache.http.auth.UsernamePasswordCredentials">
|
||||
<arg>"solradmin"</arg><!-- Username -->
|
||||
<arg>"solradmin"</arg><!-- Password -->
|
||||
</component>
|
||||
<component name="suggestHttpClient" class="org.apache.http.impl.client.DefaultHttpClient">
|
||||
<arg>clientConnectionManager</arg>
|
||||
</component>
|
||||
<component name="suggestSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
|
||||
<!-- Solr Server URL -->
|
||||
<arg>"http://localhost:8080/solr/core1-suggest"</arg>
|
||||
<arg>suggestHttpClient</arg>
|
||||
<property name="requestWriter">new org.apache.solr.client.solrj.impl.BinaryRequestWriter()</property>
|
||||
<property name="useMultiPartPost">true</property>
|
||||
<property name="soTimeout">900000</property><!-- 15min -->
|
||||
<initMethod>
|
||||
suggestHttpClient.getCredentialsProvider()
|
||||
.setCredentials(@org.apache.http.auth.AuthScope@ANY, suggestCredentials)
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.ICUConverter">
|
||||
<arg>"Any-Lower"</arg>
|
||||
</component>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.NormalizeConverter"/>
|
||||
</arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg><component class="jp.sf.fess.suggest.converter.ReadingConverter"/></arg>
|
||||
</initMethod>
|
||||
<initMethod name="addPreQueryConverter">
|
||||
<arg>
|
||||
<component class="jp.sf.fess.suggest.converter.SymbolConverter">
|
||||
<initMethod name="addSymbol">
|
||||
<arg>new String[]{ "0",
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4",
|
||||
"5", "6", "7", "8", "9", " ", " ", "【", "】", "・", "(", ")",
|
||||
"(", ")", "%", "%", "~", "+", "#", "#", "\"", "”", "\'", "\\", "¥",
|
||||
"[", "]", "「", "」", "『", "』", "<", ">", "<", ">", "/", "/", "{",
|
||||
"}", "&", "&", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ",
|
||||
"ⅰ", "ⅱ", "ⅲ", "ⅳ", "ⅴ", "ⅵ", "ⅶ", "ⅷ", "ⅸ", "ⅹ", "-", "-", "." }
|
||||
</arg>
|
||||
</initMethod>
|
||||
</component>
|
||||
</arg>
|
||||
<initMethod>
|
||||
suggestHttpClient.addRequestInterceptor(suggestInterceptor)
|
||||
</initMethod>
|
||||
</component>
|
||||
|
||||
</components>
|
||||
|
|
Loading…
Add table
Reference in a new issue