Line 1: |
Line 1: |
| + | == Summary == |
| + | |
| + | This page contains the functional specifications for the [[Server-side product indexing and search]] task of the [[Project:Personalized_Search]] project. |
| + | |
| + | It lists the options we are considering and the one we choose. |
| | | |
| == Search API == | | == Search API == |
| | | |
| The search API is called by the app to retrieve a high number of generic search results (products) that match a query. | | The search API is called by the app to retrieve a high number of generic search results (products) that match a query. |
| + | |
| + | <div style="background-color:#ddddff;border:1px solid black;padding:1em"> |
| + | There are some choices we need to make: |
| + | # '''How do we declare what kind of products we want to get back (matching)''' |
| + | ## Recommendation: by category + by keyword |
| + | # '''Which of the matching products do we send back (ordering)''' |
| + | ## Recommendation: query-independent sort key based on product data completeness, data quality, product quality and product popularity |
| + | </div> |
| | | |
| === Match (required) === | | === Match (required) === |
Line 43: |
Line 56: |
| * It could be very expensive to retrieve similar products in real-time or to pre-compute all of them | | * It could be very expensive to retrieve similar products in real-time or to pre-compute all of them |
| * Does not work for category search of freely typed search queries | | * Does not work for category search of freely typed search queries |
| + | |
| + | ==== Match a given set of products ==== |
| + | |
| + | Given the barcodes of multiple products, return the corresponding products. |
| + | |
| + | This is to be used to make in-store personalized recommendations: the user scans all possible product choices he/she is contemplating (e.g. 5 different breakfast cereals), and we return the corresponding products, which can then be filtered/ranked according to the user preferences. |
| | | |
| === Optional filters === | | === Optional filters === |
Line 59: |
Line 78: |
| | | |
| Possible criteria to include in the sort order: | | Possible criteria to include in the sort order: |
| + | |
| + | ==== Completeness of data ==== |
| + | |
| + | Products for which we have enough data (e.g. ingredients, nutrition facts) |
| + | |
| + | ==== Data quality ==== |
| + | |
| + | Products for which there are no data inconsistencies (e.g. warnings on nutrition facts) |
| | | |
| ==== Product quality ==== | | ==== Product quality ==== |
Line 92: |
Line 119: |
| == Performance == | | == Performance == |
| | | |
− | 95% of search queries need to return results in less than 10 seconds. | + | * 80% of search queries need to return results in less than 5 seconds. |
| + | * 95% of search queries need to return results in less than 10 seconds. |
| | | |
| Search queries should not overload the OFF servers (API server + MongoDB server) | | Search queries should not overload the OFF servers (API server + MongoDB server) |
| + | |
| + | [[Category:Project:Personalized_Search]] |
| + | [[Category:Search]] |