nextapps-de / flexsearch

Next-Generation full text search library for Browser and Node.js
Apache License 2.0
12.54k stars 492 forks source link

How to get the matching value with indexed array #383

Open JF-Cozy opened 1 year ago

JF-Cozy commented 1 year ago

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: 'toto@domain.com'}, {address: 'tata@domain.com'}] }, 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.

zanzlender commented 1 year ago

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...

zanzlender commented 1 year ago

Also, #358

JF-Cozy commented 1 year ago

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.