diff --git a/api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt b/api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt index 4d2cbd1e8..a4169e2e7 100644 --- a/api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt +++ b/api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt @@ -9,3 +9,4 @@ const val INDEX_RICHSKILL_DOC = "richskill_v1" const val INDEX_COLLECTION_DOC = "collection_v1" const val INDEX_JOBCODE_DOC = "jobcode_v1" const val INDEX_KEYWORD_DOC = "keyword" +const val QUOTED_SEARCH_REGEX_PATTERN = "([\"\'])(?:(?=(\\\\?))\\2.)*?\\1" \ No newline at end of file diff --git a/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt b/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt index e644c0543..3c4522fb6 100644 --- a/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt +++ b/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt @@ -4,6 +4,7 @@ import edu.wgu.osmt.PaginationDefaults import edu.wgu.osmt.api.model.ApiAdvancedSearch import edu.wgu.osmt.api.model.ApiSearch import edu.wgu.osmt.api.model.ApiSimilaritySearch +import edu.wgu.osmt.config.QUOTED_SEARCH_REGEX_PATTERN import edu.wgu.osmt.db.PublishStatus import edu.wgu.osmt.elasticsearch.FindsAllByPublishStatus import edu.wgu.osmt.elasticsearch.OffsetPageable @@ -71,13 +72,12 @@ class CustomRichSkillQueriesImpl @Autowired constructor(override val elasticSear } else { bq.must(QueryBuilders.matchBoolPrefixQuery(RichSkillDoc::name.name, it)) } - } category.nullIfEmpty()?.let { - if (it.contains("\"")) { - bq.must(simpleQueryStringQuery(it).field("${RichSkillDoc::category.name}.raw").defaultOperator(Operator.AND)) + if (it.matches(Regex(QUOTED_SEARCH_REGEX_PATTERN))) { + bq.must(simpleQueryStringQuery(it).field("${RichSkillDoc::category.name}.keyword").defaultOperator(Operator.AND)) } else { - bq.must(QueryBuilders.matchBoolPrefixQuery(RichSkillDoc::category.name, it)) + bq.must(matchBoolPrefixQuery(RichSkillDoc::category.name, it)) } } author.nullIfEmpty()?.let {