diff --git a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java index 9813b5571..84488244b 100644 --- a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java +++ b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java @@ -159,6 +159,7 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; import com.google.common.io.BaseEncoding; public class FessEsClient implements Client { @@ -219,8 +220,12 @@ public class FessEsClient implements Client { } public void addTransportAddress(final String host, final int port) { + transportAddressList.add(new TransportAddress(getInetAddressByName(host), port)); + } + + protected InetAddress getInetAddressByName(final String host) { try { - transportAddressList.add(new TransportAddress(InetAddress.getByName(host), port)); + return InetAddress.getByName(host); } catch (final UnknownHostException e) { throw new FessSystemException("Failed to resolve the hostname: " + host, e); } @@ -269,10 +274,11 @@ public class FessEsClient implements Client { }); runner.build(config); } - client = runner.client(); - addTransportAddress("localhost", runner.node().settings().getAsInt("transport.tcp.port", 9300)); + final int port = runner.node().settings().getAsInt("transport.tcp.port", 9300); + client = createTransportClient(fessConfig, Lists.newArrayList(new TransportAddress(getInetAddressByName("localhost"), port))); + addTransportAddress("localhost", port); } else { - client = createTransportClient(fessConfig); + client = createTransportClient(fessConfig, transportAddressList); } if (StringUtil.isBlank(transportAddressesValue)) { @@ -346,7 +352,7 @@ public class FessEsClient implements Client { }); } - protected Client createTransportClient(final FessConfig fessConfig) { + protected Client createTransportClient(final FessConfig fessConfig, final List transportAddressList) { final Builder settingsBuilder = Settings.builder(); settingsBuilder.put("cluster.name", fessConfig.getElasticsearchClusterName()); settingsBuilder.put("client.transport.sniff", fessConfig.isElasticsearchTransportSniff()); diff --git a/src/main/java/org/codelibs/fess/es/query/StoredLtrQueryBuilder.java b/src/main/java/org/codelibs/fess/es/query/StoredLtrQueryBuilder.java index 5108d6185..dae901a95 100644 --- a/src/main/java/org/codelibs/fess/es/query/StoredLtrQueryBuilder.java +++ b/src/main/java/org/codelibs/fess/es/query/StoredLtrQueryBuilder.java @@ -1,3 +1,18 @@ +/* + * Copyright 2012-2018 CodeLibs Project and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ package org.codelibs.fess.es.query; import java.io.IOException; @@ -6,7 +21,6 @@ import java.util.Map; import java.util.Objects; import org.apache.lucene.search.Query; -import org.elasticsearch.Version; import org.elasticsearch.common.ParseField; import org.elasticsearch.common.io.stream.NamedWriteable; import org.elasticsearch.common.io.stream.StreamOutput; @@ -54,9 +68,7 @@ public class StoredLtrQueryBuilder extends AbstractQueryBuilder boostFunctionList = new ArrayList<>(); - protected List> rescorerList = new ArrayList<>(); + protected List queryRescorerList = new ArrayList<>(); @PostConstruct public void init() { @@ -954,12 +953,10 @@ public class QueryHelper { } public RescorerBuilder[] getRescorers(final Map params) { - rescorerList.clear(); - rescorerList.add(new QueryRescorerBuilder(new StoredLtrQueryBuilder().modelName("model_6").params(params)).windowSize(100)); - return rescorerList.toArray(new RescorerBuilder[rescorerList.size()]); + return queryRescorerList.stream().map(r -> r.evaluate(params)).toArray(n -> new RescorerBuilder[n]); } - public void addRescorer(final RescorerBuilder rescorer) { - rescorerList.add(rescorer); + public void addQueryRescorer(final QueryRescorer rescorer) { + queryRescorerList.add(rescorer); } } diff --git a/src/main/java/org/codelibs/fess/score/LtrQueryRescorer.java b/src/main/java/org/codelibs/fess/score/LtrQueryRescorer.java new file mode 100644 index 000000000..f79cb6419 --- /dev/null +++ b/src/main/java/org/codelibs/fess/score/LtrQueryRescorer.java @@ -0,0 +1,42 @@ +/* + * Copyright 2012-2018 CodeLibs Project and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.codelibs.fess.score; + +import java.util.Map; + +import org.codelibs.fess.es.query.StoredLtrQueryBuilder; +import org.elasticsearch.search.rescore.QueryRescorerBuilder; +import org.elasticsearch.search.rescore.RescorerBuilder; + +public class LtrQueryRescorer implements QueryRescorer { + + protected String modelName; + + protected int windowSize = 100; + + @Override + public RescorerBuilder evaluate(Map params) { + return new QueryRescorerBuilder(new StoredLtrQueryBuilder().modelName(modelName).params(params)).windowSize(windowSize); + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + public void setWindowSize(int windowSize) { + this.windowSize = windowSize; + } +} diff --git a/src/main/java/org/codelibs/fess/score/QueryRescorer.java b/src/main/java/org/codelibs/fess/score/QueryRescorer.java new file mode 100644 index 000000000..d16267896 --- /dev/null +++ b/src/main/java/org/codelibs/fess/score/QueryRescorer.java @@ -0,0 +1,24 @@ +/* + * Copyright 2012-2018 CodeLibs Project and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.codelibs.fess.score; + +import java.util.Map; + +import org.elasticsearch.search.rescore.RescorerBuilder; + +public interface QueryRescorer { + RescorerBuilder evaluate(final Map params); +} diff --git a/src/main/java/org/codelibs/fess/util/QueryResponseList.java b/src/main/java/org/codelibs/fess/util/QueryResponseList.java index 26dabe056..abf2c33c8 100644 --- a/src/main/java/org/codelibs/fess/util/QueryResponseList.java +++ b/src/main/java/org/codelibs/fess/util/QueryResponseList.java @@ -142,7 +142,7 @@ public class QueryResponseList implements List> { } private Map parseSearchHit(final FessConfig fessConfig, final String hlPrefix, final SearchHit searchHit) { - final Map docMap = new HashMap<>(); + final Map docMap = new HashMap<>(32); if (searchHit.getSourceAsMap() == null) { searchHit.getFields().forEach((key, value) -> { docMap.put(key, value.getValue()); @@ -188,6 +188,10 @@ public class QueryResponseList implements List> { if (!docMap.containsKey(Constants.SCORE)) { docMap.put(Constants.SCORE, searchHit.getScore()); } + + if (!docMap.containsKey(fessConfig.getIndexFieldId())) { + docMap.put(fessConfig.getIndexFieldId(), searchHit.getId()); + } return docMap; } diff --git a/src/main/resources/app.xml b/src/main/resources/app.xml index 8b9497a32..12d2bc742 100644 --- a/src/main/resources/app.xml +++ b/src/main/resources/app.xml @@ -110,6 +110,16 @@ "content" +