Skocz do zawartości

Wyszukiwanie wyrazów 3 i 2 literowych


sadNot

Rekomendowane odpowiedzi

Witam, w mojej wyszukiwarce, wyrazy 2 i 3 literowe są ignorowane (szukam przez match against). Niestety nie mam dostępu do plików konfiguracyjnych php serwera, a administratorzy nie chcą zmienić zmiennej odpowiedzialnej za ilość słów uwazględanianych przez Match... Against.

Tutaj znalazłem jakiś artykuł z odpowiedzią na moje pytanie, ale dostęp jest płatny: https://algorytmy.pl/?id=2189

Ma ktoś może ten skrypt, ale wyjaśni mi jak go napisać?

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Przecież masz ta wyjaśnione jak to robi "poniższy skrypt rozbije zapytanie na wyrazy. Te które mają 4 lub więcej znaków umieści w AGAINST() MATCH(), 3 i 2 literowe w LIKE, a jednoznakowe pominie, bo takich się nie wyszukuje prawie nigdy. I na tej postawie skleci zapytanie do polecenia SELECT. Bardzo przydatne: "

Czego oczekujesz - gotowca ? To do działu zlecenia :)

Rozbij funkcją explode() po spacji na składowe, spradź jakie j są długosci i napisz kod tworzący dynamicznie zapytanie SQL...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

ok, napisałem funkcję dla codeignitera. może komuś się przyda (nie testowane)

	function search($string)
{
	$results = explode(' ', $string);
	$match_against = '';
	$likes = '';

	foreach($results as $word) {

		$wordlen = strlen($word);

		if($wordlen > 3) {
			$match_against .= '+'.$word.'* ';
		}
		elseif($wordlen == 3 OR $wordlen == 2) {
			$likes['title'] = $word;
		}
	}

	$this->db->select('title');
	$this->db->from($this->tbl_name);
	$this->db->where('MATCH (title) AGAINST ("'.$match_against.'" IN BOOLEAN MODE)', NULL, FALSE);
	$this->db->like($likes);

	$query = $this->db->get();

	return $query->result();
}

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 miesiące temu...

To bardzo proste:

Odpowiada za to zmienna konfiguracyjna MySQL:

ft_min_word_len

Która oznacza minimalną długość wyrazów które są brane pod uwagę przy wyszukiwaniu pełnotekstowym i jest ustawiona domyślnie na 4.

Jeżeli ustawisz ją np. na:

ft_min_word_len=2

To weźmie pod uwagę także wyrazy 2 literowe (nie weźmie pod uwagę 1 litery).

Natomiast to domyślne ustawienie nie jest bez powodu - chodzi tutaj o wydajność, obniżając więc np. do 2 spowodujesz, że wyszukiwania będzie bardziej obciążające.

Odnośnik do komentarza
Udostępnij na innych stronach

Konio - tylko ten sposób to zarżnięcie bazy i serwera, o wiele gorsze rozwiązanie niż zmiana zmiennej, może wolno działać - ja Tobie proponuję zmianę hostingu.

Popytaj się różnych firm hostingowych - która z nich byłaby skłonna zmienić to ustawienie na "2" i przenieś sobie forum tam gdzie Ci pójdą na rękę.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności