Próbuję uzyskać wynik dla całej sekcji instrukcji SELECT
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
W takim przypadku wyniki są na tabelę + nie są uporządkowane według trafności
Ale wypróbowałem tę metodę, która działa, ale nie jest warta produkcji
SELECT * FROM (
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `score` DESC
Powyższy kod nie jest lubiany, ponieważ wyniki są na tabelę, są łączone i porządkowane. Złe podejście.
Więc starałem się MATCH() AGAINST()
za data
w najwyższym poziomie SELECT jak dobrze to. (NIE DZIAŁA)
SELECT *,MATCH(`data`) AGAINST('keyword') as `good_score` FROM (
SELECT *,`result` as `data`,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,`content` as `data`,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,`text` as `data`,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `good_score` DESC
Powyższa instrukcja jest dla mnie idealna, ale nie działa, ponieważ data
kolumna jest tworzona w locie i nie obsługuje INDEKSU PEŁNOTEKSTOWEGO.
Moje pytanie brzmi, jak przejść do uruchomienia silnika.
- Czy możesz w jakiś sposób zrobić
data
PEŁNY TEKST - Czy istnieje inny sposób, aby działał inaczej niż W TRYBIE BOOLEAN, który nie obsługuje wyników
- Czy istnieje podejście do tego całego tematu, które sprawi, że zadziała? Utworzenie tabeli tymczasowej nie rozwiązuje tego, 50% reguła MATCH () AGAINST () powoduje, że zapytanie zwraca 0 wyników, ale istnieje wiele
- Może jest coś, za czym tęsknię?
- Tworzenie VIEW również nie działa, MySQL nie obsługuje INDEKSÓW na VIEW.
- Może dobrym pomysłem jest użycie IN BOOLEAN MODE i ręczne tworzenie punktów?
Pracowałem nad tym problemem od ponad dwóch dni. Dlatego uprzejmie proszę o pomoc. Dzięki.
źródło