Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] Wyszukiwanie, zaawansowana fraza wyszukiwania
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Potrzebuję skryptu który przeanalizuje dane wpisane w pole wyszukiwarki, np szukanie:

wystap słowo "wystap fraza" -"ale nie ta" -nieto

słowa "wystap" i "slowo" powinny wystappic, tak samo z "wystap fraza". Pojawienie się znaku minusa przed frazą lub wyrazem powoduje, że kryterium ogranicza ich użycie w tekście.

Naskrobałem coś takiego, pewnie można to zorbić lepiej, ale poddaje poniższy kod do lustracji:
http://rafb.net/p/NaCstX35.html

Pozdrawiam smile.gif


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
tiraeth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


The requested document was not found biggrin.gif

Wyszukiwanie nie działa, bo dokumentu nie znaleziono winksmiley.jpg

1/10
Go to the top of the page
+Quote Post
Athlan
post
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Zamieszcze bezpośrednio ;]

  1. <?php
  2.  
  3. class Vframe_Util_Search
  4. {
  5. protected $_aFields = array();
  6.  
  7. public function __construct(array $aFields)
  8. {
  9. $this->_aFields = $aFields;
  10. }
  11.  
  12. public function LookUp($sString)
  13. {
  14. $aQueryAdd = array();
  15. $aQueryNot = array();
  16.  
  17. // get all pharses with can't be found
  18. preg_match_all('/-"(.*?)"/', $sString, $aPharsesDebar);
  19. // pharses with should be found
  20. preg_match_all('/[^-]"(.*?)"/', $sString, $aPharsesLike);
  21.  
  22. // escape pharses from string and get all words
  23. $aItems = explode(' ', preg_replace('/-?"(.*?)"/', '', $sString));
  24.  
  25. foreach($aPharsesLike[1] as $sPharse)
  26. $aItems[] = $sPharse;
  27.  
  28. foreach($aPharsesDebar[1] as $sPharse)
  29. $aItems[] = '-' . $sPharse;
  30.  
  31. foreach($aItems as $sItem)
  32. if(($sItem = trim($sItem)))
  33. {
  34. $aElement = array();
  35. $bLike = true;
  36.  
  37. // minus character means it can't be found
  38. if(ereg('^-', $sItem))
  39. {
  40. $sItem = substr($sItem, 1);
  41. $bLike = false;
  42. }
  43.  
  44. foreach($this->_aFields as $sField)
  45. {
  46. $sElement = '`' . $sField . '` ' . ((!$bLike) ? 'NOT ' : '') . 'LIKE "%' . $sItem . '%"';
  47.  
  48. if($bLike)
  49. $aQueryAdd[] = $sElement;
  50. else
  51. $aQueryNot[] = $sElement;
  52. }
  53. }
  54.  
  55. $aQuery = array();
  56.  
  57. if(count($aQueryAdd))
  58. $aQuery[] = implode(' OR ', $aQueryAdd);
  59.  
  60. if(count($aQueryNot))
  61. $aQuery[] = implode(' AND ', $aQueryNot);
  62.  
  63. return implode(' AND ', $aQuery);
  64. }
  65. }
  66.  
  67. $oSearch = new Vframe_Util_Search(array('news_title', 'news_content'));
  68. echo $oSearch->LookUp('wystap słowo "wystap fraza" -"ale nie ta" -nieto');
  69.  
  70. ?>


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
stoprocent
post
Post #4





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 17.05.2003
Skąd: Kraków , Londyn

Ostrzeżenie: (0%)
-----


A nie latwiej uzyc MATCH AGAINST w BOOLEAN MODE ?


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:14