From: Bill Erickson Date: Fri, 20 Sep 2019 16:19:26 +0000 (-0400) Subject: support query_string queries from keyword X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=647c85587f34666bc9abe0a3a9b6ba40edf28ec1;p=working%2FEvergreen.git support query_string queries from keyword Signed-off-by: Bill Erickson --- 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*`;