@@ -97,58 +97,57 @@ export function smartQueries(
97
97
}
98
98
}
99
99
100
- return getQueriesMaybeTyping ( terms ) . concat (
101
- fuzzyMatchingDistance > 0
102
- ? getQueriesMaybeTyping ( terms , fuzzyMatchingDistance )
103
- : [ ] ,
104
- getQueriesMaybeTyping ( extraTerms ) ,
105
- fuzzyMatchingDistance > 0
106
- ? getQueriesMaybeTyping ( extraTerms , fuzzyMatchingDistance )
107
- : [ ]
100
+ const distance = Math . max ( 0 , fuzzyMatchingDistance ) ;
101
+ return getDistanceMatrix ( terms , distance ) . concat (
102
+ getDistanceMatrix ( extraTerms , distance )
108
103
) ;
109
104
}
110
105
111
106
function getQueriesMaybeTyping (
112
107
terms : SmartTerm [ ] ,
113
- editDistance ? : number
108
+ editDistance : number
114
109
) : SmartQuery [ ] {
115
- return termsToQueries ( terms , false , editDistance ) . concat (
110
+ return termsToQueries ( terms , editDistance ) . concat (
116
111
termsToQueries (
117
112
// Ignore terms whose last token already has a trailing wildcard,
118
113
// or the last token is not `maybeTyping`.
119
114
terms . filter ( ( term ) => {
120
115
const token = term [ term . length - 1 ] ;
121
116
return ! token . trailing && token . maybeTyping ;
122
117
} ) ,
123
- true ,
124
- editDistance
118
+ editDistance ,
119
+ true
125
120
)
126
121
) ;
127
122
}
128
123
129
124
function termsToQueries (
130
125
terms : SmartTerm [ ] ,
131
- maybeTyping ?: boolean ,
132
- editDistance ?: number
126
+ editDistance : number ,
127
+ maybeTyping ?: boolean
133
128
) : SmartQuery [ ] {
134
129
return terms . flatMap ( ( term ) => {
135
130
const query = {
136
131
tokens : term . map ( ( item ) => item . value ) ,
137
- term : term . map ( ( item ) => ( {
138
- value : item . value ,
139
- presence : lunr . Query . presence . REQUIRED ,
132
+ term : term . map ( ( item ) => {
140
133
// The last token of a term maybe incomplete while user is typing.
141
134
// So append more queries with trailing wildcard added.
142
- wildcard : (
143
- maybeTyping ? item . trailing || item . maybeTyping : item . trailing
144
- )
145
- ? lunr . Query . wildcard . TRAILING
146
- : lunr . Query . wildcard . NONE ,
147
- editDistance :
148
- editDistance && item . value . length > editDistance
135
+ const trailing = maybeTyping
136
+ ? item . trailing || item . maybeTyping
137
+ : item . trailing ;
138
+ const distance =
139
+ editDistance > 0 && item . value . length > editDistance
149
140
? editDistance
150
- : undefined ,
151
- } ) ) ,
141
+ : undefined ;
142
+ return {
143
+ value : item . value ,
144
+ presence : lunr . Query . presence . REQUIRED ,
145
+ wildcard : trailing
146
+ ? lunr . Query . wildcard . TRAILING
147
+ : lunr . Query . wildcard . NONE ,
148
+ editDistance : distance ,
149
+ } ;
150
+ } ) ,
152
151
} ;
153
152
154
153
// Ignore queries that all terms ignored edit distance due to too short tokens.
@@ -159,3 +158,9 @@ function termsToQueries(
159
158
return query ;
160
159
} ) ;
161
160
}
161
+
162
+ function getDistanceMatrix ( terms : SmartTerm [ ] , distance : number ) {
163
+ return Array . from ( { length : distance + 1 } , ( _ , i ) =>
164
+ getQueriesMaybeTyping ( terms , i )
165
+ ) . flat ( ) ;
166
+ }
0 commit comments