11// @flow
22import getNestedFieldValue from './getNestedFieldValue' ;
3+ import getNestedFieldValues from './getNestedFieldValues' ;
34
45import { PrefixIndexStrategy } from './IndexStrategy/index' ;
56import { LowerCaseSanitizer } from './Sanitizer/index' ;
@@ -157,6 +158,44 @@ export class Search {
157158 return this . _searchIndex . search ( tokens , this . _documents ) ;
158159 }
159160
161+ /**
162+ * @param doc
163+ * @param fieldValue Value to index
164+ * @private
165+ */
166+ indexDocumentsValue_ ( doc : Object , uid : string , fieldValue : string ) : void {
167+ this . _initialized = true ;
168+
169+ var indexStrategy = this . _indexStrategy ;
170+ var sanitizer = this . _sanitizer ;
171+ var searchIndex = this . _searchIndex ;
172+ var tokenizer = this . _tokenizer ;
173+ var uidFieldName = this . _uidFieldName ;
174+
175+ if (
176+ fieldValue != null &&
177+ typeof fieldValue !== 'string' &&
178+ fieldValue . toString
179+ ) {
180+ fieldValue = fieldValue . toString ( ) ;
181+ }
182+
183+ if ( typeof fieldValue === 'string' ) {
184+ var fieldTokens = tokenizer . tokenize ( sanitizer . sanitize ( fieldValue ) ) ;
185+
186+ for ( var fti = 0 , numFieldValues = fieldTokens . length ; fti < numFieldValues ; fti ++ ) {
187+ var fieldToken = fieldTokens [ fti ] ;
188+ var expandedTokens = indexStrategy . expandToken ( fieldToken ) ;
189+
190+ for ( var eti = 0 , nummExpandedTokens = expandedTokens . length ; eti < nummExpandedTokens ; eti ++ ) {
191+ var expandedToken = expandedTokens [ eti ] ;
192+
193+ searchIndex . indexDocument ( expandedToken , uid , doc ) ;
194+ }
195+ }
196+ }
197+ }
198+
160199 /**
161200 * @param documents
162201 * @param _searchableFields Array containing property names and paths (lists of property names) to nested values
@@ -182,36 +221,17 @@ export class Search {
182221 }
183222
184223 for ( var sfi = 0 , numSearchableFields = _searchableFields . length ; sfi < numSearchableFields ; sfi ++ ) {
185- var fieldValue ;
224+ var fieldValue , fieldValues ;
186225 var searchableField = _searchableFields [ sfi ] ;
187226
188227 if ( searchableField instanceof Array ) {
189- fieldValue = getNestedFieldValue ( doc , searchableField ) ;
228+ fieldValues = getNestedFieldValues ( doc , searchableField ) ;
229+ for ( var i = 0 ; i < fieldValues . length ; i ++ ) {
230+ this . indexDocumentsValue_ ( doc , uid , fieldValues [ i ] ) ;
231+ }
190232 } else {
191233 fieldValue = doc [ searchableField ] ;
192- }
193-
194- if (
195- fieldValue != null &&
196- typeof fieldValue !== 'string' &&
197- fieldValue . toString
198- ) {
199- fieldValue = fieldValue . toString ( ) ;
200- }
201-
202- if ( typeof fieldValue === 'string' ) {
203- var fieldTokens = tokenizer . tokenize ( sanitizer . sanitize ( fieldValue ) ) ;
204-
205- for ( var fti = 0 , numFieldValues = fieldTokens . length ; fti < numFieldValues ; fti ++ ) {
206- var fieldToken = fieldTokens [ fti ] ;
207- var expandedTokens = indexStrategy . expandToken ( fieldToken ) ;
208-
209- for ( var eti = 0 , nummExpandedTokens = expandedTokens . length ; eti < nummExpandedTokens ; eti ++ ) {
210- var expandedToken = expandedTokens [ eti ] ;
211-
212- searchIndex . indexDocument ( expandedToken , uid , doc ) ;
213- }
214- }
234+ this . indexDocumentsValue_ ( doc , uid , fieldValue ) ;
215235 }
216236 }
217237 }
0 commit comments