@@ -69,15 +69,21 @@ const escapeEsKeyword = keyword => keyword.replace(/[+-=><!|(){}[&\]^"~*?:\\/]/g
69
69
* @return {String } result after parsing
70
70
*/
71
71
function escapeElasticsearchQuery ( query ) {
72
- return query . replace ( / ( \+ | \- | \= | & & | \| \| | \> | \< | \! | \( | \) | \{ | \} | \[ | \] | \^ | " | ~ | \* | \? | \: | \\ | \/ ) / g, '\\$&' ) ;
72
+ const chars = [ '\\' , '+' , '-' , '&&' , '||' , '!' , '(' , ')' , '{' , '}' , '[' , ']' ,
73
+ '^' , '"' , '~' , '*' , '?' , ':' , '/' , '<' , '>' ] ;
74
+ let result = query ;
75
+ _ . forEach ( chars , ( item ) => {
76
+ result = result . replace ( item , `\\${ item } ` ) ;
77
+ } ) ;
78
+ return result ;
73
79
}
74
80
75
81
const buildEsFullTextQuery = ( keyword , matchType , singleFieldName ) => {
76
- keyword = escapeElasticsearchQuery ( keyword ) ;
82
+ const escapedKeyword = escapeElasticsearchQuery ( keyword ) ;
77
83
let should = [
78
84
{
79
85
query_string : {
80
- query : ( matchType === MATCH_TYPE_EXACT_PHRASE ) ? keyword : `*${ keyword } *` ,
86
+ query : ( matchType === MATCH_TYPE_EXACT_PHRASE ) ? escapedKeyword : `*${ escapedKeyword } *` ,
81
87
analyze_wildcard : ( matchType === MATCH_TYPE_WILDCARD ) ,
82
88
fields : [ 'name^5' , 'description^3' , 'type^2' ] ,
83
89
} ,
@@ -90,7 +96,7 @@ const buildEsFullTextQuery = (keyword, matchType, singleFieldName) => {
90
96
path : 'details.utm' ,
91
97
query : {
92
98
query_string : {
93
- query : ( matchType === MATCH_TYPE_EXACT_PHRASE ) ? keyword : `*${ keyword } *` ,
99
+ query : ( matchType === MATCH_TYPE_EXACT_PHRASE ) ? escapedKeyword : `*${ escapedKeyword } *` ,
94
100
analyze_wildcard : ( matchType === MATCH_TYPE_WILDCARD || matchType === MATCH_TYPE_SINGLE_FIELD ) ,
95
101
fields : [ 'details.utm.code^4' ] ,
96
102
} ,
@@ -104,7 +110,7 @@ const buildEsFullTextQuery = (keyword, matchType, singleFieldName) => {
104
110
path : 'members' ,
105
111
query : {
106
112
query_string : {
107
- query : ( matchType === MATCH_TYPE_EXACT_PHRASE ) ? keyword : `*${ keyword } *` ,
113
+ query : ( matchType === MATCH_TYPE_EXACT_PHRASE ) ? escapedKeyword : `*${ escapedKeyword } *` ,
108
114
analyze_wildcard : ( matchType === MATCH_TYPE_WILDCARD ) ,
109
115
fields : [ 'members.email' , 'members.handle' , 'members.firstName' , 'members.lastName' ] ,
110
116
} ,
0 commit comments