Hi @ganag,
This is correct behavior. In your example you are referring to occurrence of word equipment in browser, but what you can see in browser does not mean that is content of this specific page. Let's have a closer look on this one
where as http://localhost:4502/content/we-retail/ca/en/products/equipment.html which is displayed next shows 22 occurrence of "equipment" word .
If you will go to crx you will see that this page contains only 2 occurrence of word equipment not 22. Other occurrence you can see in the browser is content from other pages that are referenced via Product Grid component.
I do not think this is correct way to recognize how many times specific word is used, you should rely on what is inside nodes in crx instead. It's because this is used to build index, not values that can be seen on final page.
I have used simple SQL2 query for given scenario:
SELECT * FROM [cq:Page] AS s WHERE ISDESCENDANTNODE([/content/we-retail/ca/en]) and CONTAINS(s.*, 'Equipment')
And it's giving proper results when we look what's in the repository. In terms of SQL2 query itself, you do not have to add explicitly ORDER BY [jcr:score] DESC because this is default behavior, URL to documentation that describes this:
If you want to control order of results you can utilize boost option in your index: