From fb5e707461ad9267b3aef2f3be54f1b049793e23 Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Wed, 7 Dec 2022 16:57:47 -0600 Subject: [PATCH 1/4] first attempt to fix --- .../kotlin/edu/wgu/osmt/config/Constants.kt | 2 ++ .../edu/wgu/osmt/richskill/RichSkillEsRepo.kt | 20 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) 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..54515b803 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,5 @@ 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" +const val CATEGORY_FIELD_NAME = "category" 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..77c670daa 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,8 @@ 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.CATEGORY_FIELD_NAME +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 @@ -74,10 +76,12 @@ class CustomRichSkillQueriesImpl @Autowired constructor(override val elasticSear } 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}.raw").defaultOperator(Operator.AND)) + bq.must( + wrapperQuery(buildManualQuery(CATEGORY_FIELD_NAME, it))) } else { - bq.must(QueryBuilders.matchBoolPrefixQuery(RichSkillDoc::category.name, it)) + bq.must(matchBoolPrefixQuery(RichSkillDoc::category.name, it)) } } author.nullIfEmpty()?.let { @@ -320,6 +324,16 @@ class CustomRichSkillQueriesImpl @Autowired constructor(override val elasticSear return nsq } + fun buildManualQuery(fieldName: String, fieldValue: String) : String { + return String() + .plus("{") + .plus("\"term\": {") + .plus("\"" + fieldName).plus(".keyword\": {") + .plus("\"value\":") + .plus(fieldValue) + .plus("}}}") + } + override fun findSimilar(apiSimilaritySearch: ApiSimilaritySearch): SearchHits { val limitedPageable = OffsetPageable(0, 10, null) val nsq: NativeSearchQueryBuilder = NativeSearchQueryBuilder().withPageable(limitedPageable).withQuery( From 2601cab0b8a75a61447453420e3f3c249531d4c3 Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Thu, 8 Dec 2022 09:15:46 -0600 Subject: [PATCH 2/4] changing field name reference --- api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 77c670daa..f2882d8cb 100644 --- a/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt +++ b/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt @@ -4,7 +4,6 @@ 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.CATEGORY_FIELD_NAME import edu.wgu.osmt.config.QUOTED_SEARCH_REGEX_PATTERN import edu.wgu.osmt.db.PublishStatus import edu.wgu.osmt.elasticsearch.FindsAllByPublishStatus @@ -79,7 +78,7 @@ class CustomRichSkillQueriesImpl @Autowired constructor(override val elasticSear if (it.matches(Regex(QUOTED_SEARCH_REGEX_PATTERN))) { //bq.must(simpleQueryStringQuery(it).field("${RichSkillDoc::category.name}.raw").defaultOperator(Operator.AND)) bq.must( - wrapperQuery(buildManualQuery(CATEGORY_FIELD_NAME, it))) + wrapperQuery(buildManualQuery(RichSkillDoc::category.name, it))) } else { bq.must(matchBoolPrefixQuery(RichSkillDoc::category.name, it)) } From 4c44e0c2f6a8c29e568dc226ecf2a89eecde3fc6 Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Thu, 8 Dec 2022 09:24:41 -0600 Subject: [PATCH 3/4] Removing Constant for field name --- api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 54515b803..9bff96711 100644 --- a/api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt +++ b/api/src/main/kotlin/edu/wgu/osmt/config/Constants.kt @@ -9,5 +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" -const val CATEGORY_FIELD_NAME = "category" +const val QUOTED_SEARCH_REGEX_PATTERN = "([\"'])(?:(?=(\\\\?))\\2.)*?\\1" \ No newline at end of file From 8d698bcea63e4352b972318fd3cf51dcd032f484 Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Fri, 9 Dec 2022 10:42:53 -0600 Subject: [PATCH 4/4] removing buildManualQuery method, changing to use keyword subfield with SimpleQuery --- .../main/kotlin/edu/wgu/osmt/config/Constants.kt | 2 +- .../edu/wgu/osmt/richskill/RichSkillEsRepo.kt | 15 +-------------- 2 files changed, 2 insertions(+), 15 deletions(-) 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 9bff96711..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,4 +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 +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 f2882d8cb..3c4522fb6 100644 --- a/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt +++ b/api/src/main/kotlin/edu/wgu/osmt/richskill/RichSkillEsRepo.kt @@ -72,13 +72,10 @@ class CustomRichSkillQueriesImpl @Autowired constructor(override val elasticSear } else { bq.must(QueryBuilders.matchBoolPrefixQuery(RichSkillDoc::name.name, it)) } - } category.nullIfEmpty()?.let { if (it.matches(Regex(QUOTED_SEARCH_REGEX_PATTERN))) { - //bq.must(simpleQueryStringQuery(it).field("${RichSkillDoc::category.name}.raw").defaultOperator(Operator.AND)) - bq.must( - wrapperQuery(buildManualQuery(RichSkillDoc::category.name, it))) + bq.must(simpleQueryStringQuery(it).field("${RichSkillDoc::category.name}.keyword").defaultOperator(Operator.AND)) } else { bq.must(matchBoolPrefixQuery(RichSkillDoc::category.name, it)) } @@ -323,16 +320,6 @@ class CustomRichSkillQueriesImpl @Autowired constructor(override val elasticSear return nsq } - fun buildManualQuery(fieldName: String, fieldValue: String) : String { - return String() - .plus("{") - .plus("\"term\": {") - .plus("\"" + fieldName).plus(".keyword\": {") - .plus("\"value\":") - .plus(fieldValue) - .plus("}}}") - } - override fun findSimilar(apiSimilaritySearch: ApiSimilaritySearch): SearchHits { val limitedPageable = OffsetPageable(0, 10, null) val nsq: NativeSearchQueryBuilder = NativeSearchQueryBuilder().withPageable(limitedPageable).withQuery(