func (udc *UpsideDownCouch) indexField(docID string, field document.Field, fieldIndex uint16, fieldLength int, tokenFreqs analysis.TokenFrequencies) ([]UpsideDownCouchRow, []*BackIndexTermEntry) { rows := make([]UpsideDownCouchRow, 0, 100) backIndexTermEntries := make([]*BackIndexTermEntry, 0) fieldNorm := float32(1.0 / math.Sqrt(float64(fieldLength))) for _, tf := range tokenFreqs { var termFreqRow *TermFrequencyRow if field.Options().IncludeTermVectors() { tv, newFieldRows := udc.termVectorsFromTokenFreq(fieldIndex, tf) rows = append(rows, newFieldRows...) termFreqRow = NewTermFrequencyRowWithTermVectors(tf.Term, fieldIndex, docID, uint64(frequencyFromTokenFreq(tf)), fieldNorm, tv) } else { termFreqRow = NewTermFrequencyRow(tf.Term, fieldIndex, docID, uint64(frequencyFromTokenFreq(tf)), fieldNorm) } // record the back index entry backIndexTermEntry := BackIndexTermEntry{Term: proto.String(string(tf.Term)), Field: proto.Uint32(uint32(fieldIndex))} backIndexTermEntries = append(backIndexTermEntries, &backIndexTermEntry) rows = append(rows, termFreqRow) } return rows, backIndexTermEntries }
func (udc *SmolderingCouch) storeField(docNum []byte, field document.Field, fieldIndex uint16, rows []index.IndexRow, backIndexStoredEntries []*BackIndexStoreEntry) ([]index.IndexRow, []*BackIndexStoreEntry) { fieldType := encodeFieldType(field) storedRow := NewStoredRow(docNum, fieldIndex, field.ArrayPositions(), fieldType, field.Value()) // record the back index entry backIndexStoredEntry := BackIndexStoreEntry{Field: proto.Uint32(uint32(fieldIndex)), ArrayPositions: field.ArrayPositions()} return append(rows, storedRow), append(backIndexStoredEntries, &backIndexStoredEntry) }
func (udc *UpsideDownCouch) storeField(docID string, field document.Field, fieldIndex uint16) ([]UpsideDownCouchRow, []*BackIndexStoreEntry) { rows := make([]UpsideDownCouchRow, 0, 100) backIndexStoredEntries := make([]*BackIndexStoreEntry, 0) fieldType := encodeFieldType(field) storedRow := NewStoredRow(docID, fieldIndex, field.ArrayPositions(), fieldType, field.Value()) // record the back index entry backIndexStoredEntry := BackIndexStoreEntry{Field: proto.Uint32(uint32(fieldIndex)), ArrayPositions: field.ArrayPositions()} backIndexStoredEntries = append(backIndexStoredEntries, &backIndexStoredEntry) rows = append(rows, storedRow) return rows, backIndexStoredEntries }
func (f *Firestorm) storeField(docID []byte, docNum uint64, field document.Field, fieldIndex uint16) index.IndexRow { fieldValue := make([]byte, 1+len(field.Value())) fieldValue[0] = encodeFieldType(field) copy(fieldValue[1:], field.Value()) storedRow := NewStoredRow(docID, docNum, fieldIndex, field.ArrayPositions(), fieldValue) return storedRow }
func (udc *UpsideDownCouch) storeField(docID string, field document.Field, fieldIndex uint16, existingKeys map[string]bool) ([]UpsideDownCouchRow, []UpsideDownCouchRow, []*BackIndexStoreEntry) { updateRows := make([]UpsideDownCouchRow, 0) addRows := make([]UpsideDownCouchRow, 0) backIndexStoredEntries := make([]*BackIndexStoreEntry, 0) fieldType := encodeFieldType(field) storedRow := NewStoredRow(docID, fieldIndex, field.ArrayPositions(), fieldType, field.Value()) // record the back index entry backIndexStoredEntry := BackIndexStoreEntry{Field: proto.Uint32(uint32(fieldIndex)), ArrayPositions: field.ArrayPositions()} backIndexStoredEntries = append(backIndexStoredEntries, &backIndexStoredEntry) storedRowKey := string(storedRow.Key()) _, existed := existingKeys[storedRowKey] if existed { // this is an update updateRows = append(updateRows, storedRow) // this field was stored last time, delete it from that map delete(existingKeys, storedRowKey) } else { addRows = append(addRows, storedRow) } return addRows, updateRows, backIndexStoredEntries }
func (udc *UpsideDownCouch) indexField(docID string, field document.Field, fieldIndex uint16, fieldLength int, tokenFreqs analysis.TokenFrequencies, existingKeys map[string]bool) ([]UpsideDownCouchRow, []UpsideDownCouchRow, []*BackIndexTermEntry) { updateRows := make([]UpsideDownCouchRow, 0) addRows := make([]UpsideDownCouchRow, 0) backIndexTermEntries := make([]*BackIndexTermEntry, 0) fieldNorm := float32(1.0 / math.Sqrt(float64(fieldLength))) for _, tf := range tokenFreqs { var termFreqRow *TermFrequencyRow if field.Options().IncludeTermVectors() { tv, newFieldRows := udc.termVectorsFromTokenFreq(fieldIndex, tf) updateRows = append(updateRows, newFieldRows...) termFreqRow = NewTermFrequencyRowWithTermVectors(tf.Term, fieldIndex, docID, uint64(frequencyFromTokenFreq(tf)), fieldNorm, tv) } else { termFreqRow = NewTermFrequencyRow(tf.Term, fieldIndex, docID, uint64(frequencyFromTokenFreq(tf)), fieldNorm) } // record the back index entry backIndexTermEntry := BackIndexTermEntry{Term: proto.String(string(tf.Term)), Field: proto.Uint32(uint32(fieldIndex))} backIndexTermEntries = append(backIndexTermEntries, &backIndexTermEntry) tfrKeyString := string(termFreqRow.Key()) _, existed := existingKeys[tfrKeyString] if existed { // this is an update updateRows = append(updateRows, termFreqRow) // this term existed last time, delete it from that map delete(existingKeys, tfrKeyString) } else { // this is an add addRows = append(addRows, termFreqRow) } } return addRows, updateRows, backIndexTermEntries }