flexsearch
flexsearch copied to clipboard
How to get the matching value with indexed array
When dealing with complex documents, it is recommanded to use a foo[]:bar
syntax to index array attributes.
The problem is that you can't know which value of the array matched the search in the results. For example, if we have a list of contacts that may contain several email addresses { emails: [{address: '[email protected]'}, {address: '[email protected]'}] }
, and we do a search on tata
, the result will include emails[].address
without us knowing which email address it is precisely.
Is there a way to overcome this? It would be nice to know which array value matched the search.
Did you set enrich=true
when searching?
If yes then maybe you can try something like this if it works for you. I solved this like so:
E.g. I want to save a video transcript and search by keywords when something was said. And my file looks like so
type Transcript = {
id: string;
url: string;
transcript: Array<{
timestamp: string;
transcript: string;
}>;
};
And then I have the same problem as you. Because of that I loop over my array and create a object for each element which then looks like this
type FlexSearchDocument = {
id: string;
doc: {
id: string;
url: string;
transcript: string;
timestamp: string;
};
};
In my case this is OK since what matters most is that I get the Id and Url. However, I can't yet estimate if the file is quickly getting big because of that...
Also, #358
No I didn't set enrich=true
but tried with it, same problem so far. As the objects are quite big, and I already have them elsewhere, I prefer to keep only the ids.