diff --git a/src/main/java/org/codelibs/fess/helper/QueryHelper.java b/src/main/java/org/codelibs/fess/helper/QueryHelper.java index 489509d3a..7fd025ac2 100644 --- a/src/main/java/org/codelibs/fess/helper/QueryHelper.java +++ b/src/main/java/org/codelibs/fess/helper/QueryHelper.java @@ -291,6 +291,7 @@ public class QueryHelper { buildBaseQuery(queryContext, context); buildBoostQuery(queryContext); buildRoleQuery(queryContext, searchRequestType); + buildVirtualHostQuery(queryContext, searchRequestType); if (!queryContext.hasSorts() && defaultSortBuilders != null) { queryContext.addSorts(defaultSortBuilders); @@ -298,6 +299,22 @@ public class QueryHelper { return queryContext; } + protected void buildVirtualHostQuery(final QueryContext queryContext, final SearchRequestType searchRequestType) { + switch (searchRequestType) { + case ADMIN_SEARCH: + // nothing to do + break; + default: + final String key = fessConfig.getVirtualHostKey(); + if (StringUtil.isNotBlank(key)) { + queryContext.addQuery(boolQuery -> { + boolQuery.filter(QueryBuilders.termQuery(fessConfig.getIndexFieldVirtualHost(), key)); + }); + } + break; + } + } + protected void buildRoleQuery(final QueryContext queryContext, final SearchRequestType searchRequestType) { if (roleQueryHelper != null && queryContext.roleQueryEnabled()) { final Set roleSet = roleQueryHelper.build(searchRequestType); diff --git a/src/test/java/org/codelibs/fess/helper/QueryHelperTest.java b/src/test/java/org/codelibs/fess/helper/QueryHelperTest.java index 2539f0b2c..e3591e1f3 100644 --- a/src/test/java/org/codelibs/fess/helper/QueryHelperTest.java +++ b/src/test/java/org/codelibs/fess/helper/QueryHelperTest.java @@ -15,9 +15,13 @@ */ package org.codelibs.fess.helper; +import java.io.File; + import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.queryparser.ext.ExtendableQueryParser; +import org.codelibs.core.io.FileUtil; +import org.codelibs.core.misc.DynamicProperties; import org.codelibs.fess.Constants; import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType; import org.codelibs.fess.mylasta.direction.FessConfig; @@ -27,6 +31,7 @@ import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; +import org.lastaflute.di.core.factory.SingletonLaContainerFactory; public class QueryHelperTest extends UnitFessTestCase { @@ -43,10 +48,16 @@ public class QueryHelperTest extends UnitFessTestCase { queryParser.setDefaultOperator(QueryParser.Operator.AND); return queryParser; } + }; + File file = File.createTempFile("test", ".properties"); + file.deleteOnExit(); + FileUtil.writeBytes(file.getAbsolutePath(), "ldap.security.principal=%s@fess.codelibs.local".getBytes("UTF-8")); + DynamicProperties systemProps = new DynamicProperties(file); + SingletonLaContainerFactory.getContainer().register(systemProps, "systemProperties"); final FessConfig fessConfig = ComponentUtil.getFessConfig(); - registerMockInstance(fessConfig); - registerMockInstance(new SystemHelper()); + registerMock(fessConfig); + registerMock(new SystemHelper()); inject(queryHelper); queryHelper.init(); }