package com.constellio.model.services.search; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.allConditions; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.containingText; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.equal; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.isNotEqual; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.whereAll; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.services.search.query.logical.LogicalSearchValueCondition; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; public class QueriesExemples { MetadataSchemaType categories; MetadataSchemaType folders; MetadataSchema customFolders; LogicalSearchCondition condition; Metadata folderTitle; Metadata folderDescription; Metadata folderRule, folderRuleCode; Metadata folderCategory; Metadata categoryRules, categoryIsEnabled; public void testA() throws Exception { condition = from(folders).whereAny(folderTitle, folderDescription).isContainingText("blabla") .and(containingText("francis")).andWhere(folderRule).isAny(equal("1"), equal("pomme"), isNotEqual("2")); } public void testB() throws Exception { LogicalSearchValueCondition containingFrancisAndBaril = containingText("francis").and(containingText("baril")); LogicalSearchValueCondition containingChuckAndNorris = containingText("chuck").and(containingText("norris")); condition = from(customFolders).whereAny(folderTitle, folderDescription).is(containingFrancisAndBaril) .or(containingChuckAndNorris).orWhere(folderRule).is("1"); // q=((title_s:*francis* AND title_s:*baril*) OR (title_s:*chuck* AND title_s:*norris*) OR (description_s:*francis* AND // description_s:*baril*) OR (description_s:*chuck* AND description_s:*norris*)) OR (rule:1) } public void testC() throws Exception { LogicalSearchValueCondition containingFrancisAndBaril = containingText("francis").and(containingText("baril")); LogicalSearchValueCondition containingChuckAndNorris = containingText("chuck").and(containingText("norris")); LogicalSearchCondition containingFrancisOrChuck = whereAll(folderTitle, folderDescription).is( containingFrancisAndBaril).or(containingChuckAndNorris); LogicalSearchCondition enabledCategories = from(categories).where(categoryRules).isNotNull().andWhere(categoryIsEnabled) .isTrueOrNull(); LogicalSearchCondition folderCategoryHasRule = where(folderRule).is(enabledCategories); LogicalSearchCondition folderCategoryCodeStartingWithA = where(folderRuleCode).isStartingWithText("A"); condition = from(folders).whereAnyCondition(containingFrancisOrChuck, allConditions(folderCategoryHasRule, folderCategoryCodeStartingWithA)); } }