Skip to content

Mutation of returned _source data in results by highlightResults function #10

@mahaffey

Description

@mahaffey

When a user specifies they want their data to be highlighted the highlighted data returns a truncated portion in the _source.

Please see my comments below. I didn't think a pull request was appropriate as all I would be doing is deleting a function.

Is there a reason for mutating the source of the highlighted data?

Best,
Ryan

// src/utils/helper.js


// Why are we mutating the original _source object here?  
// This takes away information for the end-user given by elasticsearch

// My use case of ElasticSearch is to store parsed pdfs as strings 
// These contain 1000+ chars each

// The highlighted information given by elasticsearch have many fewer characters than this. 
// Around 100 chars 

// I want to be able to send the whole of the information to the end-user in the results

// If you remove this function (highlightResults)
// the user still retains the highlighted information in the main result object
//  and the original _source information

const highlightResults = (result) => {
	const data = { ...result };
	if (data.highlight) {
		Object.keys(data.highlight).forEach((highlightItem) => {
			const highlightValue = data.highlight[highlightItem][0];
			data._source = Object.assign({}, data._source, { [highlightItem]: highlightValue });
		});
	}
	return data;
};

export const parseHits = (hits) => {
	let results = null;
	if (hits) {
		results = [...hits].map((item) => {
			const streamProps = {};

			if (item._updated) {
				streamProps._updated = item._updated;
			} else if (item._deleted) {
				streamProps._deleted = item._deleted;
			}



                        // no need to mutate the data! below

			const data = highlightResults(item);

			return {
				_id: data._id,
				_index: data._index,
				...data._source,
				...streamProps,
			};
		});
	}
	return results;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions