I think what Nicolas suggests is probably the easiest path. Here is one example that does what I think you are looking for. I use a simple string comparison on the contents, you could do something more sophisticated.
#+BEGIN_SRC emacs-lisp
(defun fruit-link-face (path)
(let* ((ln (org-element-context))
(start (org-element-property :contents-begin ln))
(end (org-element-property :contents-end ln))
(contents (if (and start end)
(buffer-substring start end)
nil)))
(if (and contents (stringp contents))
(if (string> contents "j")
'(:foreground "red")
'(:foreground "blue"))
'org-link)))
(org-link-set-parameters "fruit"
:face 'fruit-link-face)
#+END_SRC
#+RESULTS:
| :face | fruit-link-face |
[[fruit:mango ][test]]. # this will be red
fruit:apple. # regular org link.
[[fruit:apple][bera]]. # this will be blue
John
-----------------------------------
Professor John Kitchin
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803