So, we have been working on this for a while now. The main issue was ensuring that all the features work well together.
For example: If we give high rank to a name match then sometimes certain tag matches would be mistaken for a name match and hence the module with those tags would not show up first.
The solution? Trial and error! This and a complete understanding of what each function does is the does only solution. The same is also mentioned in an elasticsearch documentation! So after a few trials , we have come up with a proper algorithm which does the job.
Here are the differences:
1. Perfect match of tags
OLD:
NEW
Difference?
All the modules with the tag ranked before any other module.
- Perfect match of UID :
OLD:
New:
Difference? Added much more weight to UID and also mad it non analysed.
3. Allow minor spelling mistakes:
4.Perfect title match comes first:
5.Rest of the results also make more sense: OLD:
NEW:
6.Partial matching improved :
OLD:
NEW:
Another example:
Search query: “Reporting”
Results:
For any questions or suggestions, you may contact me, @darius or @mseaton