From ab43ba95d214bb5ba292c1ef6175317198db9a41 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Fri, 20 Sep 2019 12:19:26 -0400 Subject: [PATCH] support query_string queries from keyword Signed-off-by: Bill Erickson --- .../src/eg2/src/app/share/catalog/elastic.service.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts b/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts index 03fc0b6bad..94e72a9cce 100644 --- a/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts +++ b/Open-ILS/src/eg2/src/app/share/catalog/elastic.service.ts @@ -6,8 +6,8 @@ import {NetService} from '@eg/core/net.service'; import {PcrudService} from '@eg/core/pcrud.service'; import {CatalogSearchContext} from './search-context'; import {RequestBodySearch, MatchQuery, MultiMatchQuery, TermsQuery, Query, Sort, - PrefixQuery, NestedQuery, BoolQuery, TermQuery, WildcardQuery, RangeQuery - } from 'elastic-builder'; + PrefixQuery, NestedQuery, BoolQuery, TermQuery, WildcardQuery, RangeQuery, + QueryStringQuery} from 'elastic-builder'; @Injectable() export class ElasticService { @@ -246,6 +246,21 @@ export class ElasticService { // title search. fieldClass = 'title'; ts.ccvmFilters.bib_level.push('s'); + + } else if (fieldClass === 'keyword' && + matchOp === 'contains' && value.match(/:/)) { + + // A search where 'keyword' 'contains' a value with a ':' + // character is assumed to be a complex / query string search. + // NOTE: could handle this differently, e.g. provide an escape + // character (e.g. !title:potter), a dedicated matchOp, etc. + boolNode.must( + new QueryStringQuery(value) + .defaultOperator('AND') + .defaultField('keyword.text') + ); + + return; } const textIndex = `${fieldClass}.text*`; -- 2.11.0