diff --git a/solidify-index/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java b/solidify-index/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java
index f9e4a621038cfaeaa6fb102e64deb3ab1d62d7d1..bcf5ab7cd58e588f4b0c13f3619072698df9d369 100644
--- a/solidify-index/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java
+++ b/solidify-index/src/main/java/ch/unige/solidify/index/indexing/elasticsearch/ElasticsearchService.java
@@ -45,6 +45,9 @@ import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.client.indices.GetIndexRequest;
 import org.elasticsearch.index.query.AbstractQueryBuilder;
 import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.MatchQueryBuilder;
+import org.elasticsearch.index.query.MultiMatchQueryBuilder;
+import org.elasticsearch.index.query.Operator;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.QueryStringQueryBuilder;
@@ -351,11 +354,19 @@ public abstract class ElasticsearchService<T extends IndexMetadata> extends Inde
   private QueryBuilder getMatchQueryBuilder(SearchCondition condition) {
     if (!StringTool.isNullOrEmpty(condition.getField()) && !StringTool.isNullOrEmpty(condition.getValue())) {
       // 'match' query
-      return QueryBuilders.matchQuery(condition.getField(), condition.getValue());
+      MatchQueryBuilder builder = QueryBuilders.matchQuery(condition.getField(), condition.getValue());
+      if (condition.getSearchOperator() != null) {
+        builder.operator(Operator.fromString(condition.getSearchOperator().name()));
+      }
+      return builder;
     } else if (!condition.getMultiMatchFields().isEmpty() && !StringTool.isNullOrEmpty(condition.getValue())) {
       // 'multi_match' query
-      return QueryBuilders.multiMatchQuery(condition.getValue(),
+      MultiMatchQueryBuilder builder = QueryBuilders.multiMatchQuery(condition.getValue(),
               condition.getMultiMatchFields().toArray(new String[condition.getMultiMatchFields().size()]));
+      if (condition.getSearchOperator() != null) {
+        builder.operator(Operator.fromString(condition.getSearchOperator().name()));
+      }
+      return builder;
     } else {
       throw new SolidifyRuntimeException("Invalid 'match' search condition");
     }
diff --git a/solidify-model/src/main/java/ch/unige/solidify/rest/SearchCondition.java b/solidify-model/src/main/java/ch/unige/solidify/rest/SearchCondition.java
index d5c07b8cc5c22353a8c4b86ae9f3cb7ab5b3ba8d..3f70c40d042260cf679db8bbd1f21a9737239023 100644
--- a/solidify-model/src/main/java/ch/unige/solidify/rest/SearchCondition.java
+++ b/solidify-model/src/main/java/ch/unige/solidify/rest/SearchCondition.java
@@ -36,6 +36,8 @@ public class SearchCondition implements Serializable {
    */
   private SearchConditionType type = SearchConditionType.MATCH;
 
+  private SearchOperator searchOperator = null;
+
   /**
    * Indicate whether the condition is used to find documents that must, must not or should contain its value
    */
@@ -162,4 +164,12 @@ public class SearchCondition implements Serializable {
   public void setLowerValue(String lowerValue) {
     this.lowerValue = lowerValue;
   }
+
+  public SearchOperator getSearchOperator() {
+    return this.searchOperator;
+  }
+
+  public void setSearchOperator(SearchOperator searchOperator) {
+    this.searchOperator = searchOperator;
+  }
 }
diff --git a/solidify-model/src/main/java/ch/unige/solidify/rest/SearchOperator.java b/solidify-model/src/main/java/ch/unige/solidify/rest/SearchOperator.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5192e46357a76031b7e4db55d3b8d69780b5071
--- /dev/null
+++ b/solidify-model/src/main/java/ch/unige/solidify/rest/SearchOperator.java
@@ -0,0 +1,27 @@
+/*-
+ * %%----------------------------------------------------------------------------------------------
+ * Solidify Framework - Solidify Model - SearchOperator.java
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * %----------------------------------------------------------------------------------------------%
+ * Copyright (C) 2017 - 2022 University of Geneva
+ * %----------------------------------------------------------------------------------------------%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program.  If not, see
+ * <http://www.gnu.org/licenses/gpl-2.0.html>.
+ * ----------------------------------------------------------------------------------------------%%
+ */
+package ch.unige.solidify.rest;
+
+public enum SearchOperator {
+  AND, OR
+}