Twój problem dotyczy utworzenia priorytet zapytanie logiczną i dla tego typu jedno zapytanie musi iść w głębi wyszukiwania Boolean i teraz jak Wyszukiwanie Boolean jest wykonywane. W prostych słowach pozwól mi wyjaśnić, dlaczego pokazano drugi wynik wyniku.
Kiedy należy najpierw zrozumieć, co znaczy Boolean w programowaniu? Oznacza to, że albo warunek jest prawdziwy, albo fałszywy, e 0 do 1.
Pozwolę sobie teraz wyjaśnić, że przeprowadzane jest wyszukiwanie Boole'a? Dałeś dwa słowa. Przeszukuj wiersz po wierszu w trybie Boolean. Wyszukiwarka uruchamia się i przeszukuje wiersz po wierszu, gdzie znajduje się pierwsze słowo, czyni rekord jako prawdziwy i podaje wynik jako 1 do wierszy, w których znajduje się pierwsze słowo, a także przygotowuje liczby słów znalezionych w wierszu.
Teraz przesuwa następne słowo i robi ten sam proces, który daje rekord True i tworzy listę rekordów, gdziekolwiek znajduje się słowo, a także przygotowuje liczbę słów znalezionych w rzędzie.
Teraz dostępne są dwa rzędy wyników, które są uderzane pałkami, a pierwszeństwo mają słowa z maksymalną liczbą słów i wierszy. Oto główny problem.
Przykład
pierwsze >>> całkowite nr. >> Drugi >> suma nos. >>> końcowe >> wiersz
Słowo >>> Wyniki >> Słowo >>>> słów>>> Wyniki >> nie >> Odpowiedź
1 >>>>>>>> 2 >>>>>>>> 1 >>>>>>>>> 1 >>>>>>>> 1.33 >>>> 1 >>> 1.33
0 >>>>>>>> 0> >>>>>>> 2 >>>>>>>>> 2 >>>>>>>> 1,25 >>>> 2 >>> 1,25
0 >>>>>>>> 0 >> >>>>>> 1 >>>>>>>>> 0 >>>>>>>> 1,25 >>>> 3 >>> 1
podczas clubbing dwie listy wyników podczas prawda dodany z wartością false wynik jest prawdziwy, tak jakby dodać 1 + 0 = 1, a wyniki są shoul d o wartości większej niż 1. Tak więc, podczas oceniania trafności względem znalezionych słów, zawsze okazuje się, że wyszukiwarka pokazuje wyniki, w których znalazło jakieś słowo.
Zapytania dotyczące trafności punktowania są dokonywane w dwóch typach albo ignorują wyniki, które są równe jeden, i tylko wykonują obliczenia na rekordach, których wynik jest większy niż 1. Drugim jest utworzenie takiego zapytania, aby nigdy nie było rekordów równych jeden. Jak w twoim przypadku można więc poniższe rzeczy również uzyskać poprawne wyniki dla dwóch słowach:
SELECT *, ((1.3 * (MATCH(title) AGAINST ('+term +term2' IN BOOLEAN MODE))) + (0.6 * (MATCH(text) AGAINST ('+term +term2' IN BOOLEAN MODE)))) AS score FROM results WHERE (MATCH(title, text) AGAINST ('+term +term2' IN BOOLEAN MODE)) HAVING relevance > 0 ORDER BY relevance DESC;
wiem, że przy użyciu wyraz mający dokonać kwerendy trochę powolna, ale nie ma innego rozwiązania dostępne. Mam nadzieję, że to rozwiąże twoje zapytanie.