Buduję wyszukiwanie strony, która wykorzystuje wyszukiwanie pełnotekstowe. Samo wyszukiwanie działa świetnie, to nie mój problem. Łączę słowa dostarczone przez użytkownika (MATCH ... AGAINST ...) z AND, aby wiele słów dalej zawęziło wyniki. Teraz wiem, że niektóre słowa kończące się nie są indeksowane, i to w porządku, nie chcę ich używać jako kryteriów wyboru. Jeśli jednak w zestawie słów kluczowych (przez użytkownika) zostanie podane hasło, zabije ono wszystkie wyniki (zgodnie z oczekiwaniami), nawet jeśli słowo faktycznie znajduje się w określonym bloku tekstowym.ignorowanie mysql fulltext stopwords w zapytaniu
Moje pytanie: czy istnieje sposób sprawdzenia, czy określone słowo jest słowem kończącym w momencie zapytania? Moim preferowanym rozwiązaniem byłoby po prostu wykluczyć odpowiednie słowo z kryteriów wyszukiwania (nie obchodzi mnie, czy użytkownik może zawęzić wyniki słowem "nie", po prostu nie chcę, aby MySQL zwrócił pusty zestaw wyników, ponieważ użytkownik pod warunkiem, że nie ma ich w wynikach). Czy po prostu będę musiał opróżnić listę stopów? Dziękuję bardzo za pomoc.
edytuj ---- Przykro mi, ale tak naprawdę nie ma tu fragmentów kodu, które można by w nim umieścić. Kod działa dobrze, właściwie dokładnie tak, jak powinien. Jest to bardziej logiczny problem, z którym mam do czynienia. Ale jako przykład, w drodze wyjaśnienia:
powiedzmy istnieją trzy rekordy, które zawierają słowa (ale nie wyłącznie)
1: jabłko, pomarańcza, mango, bananów 2: winogrono , pomarańczowy, ananas, mango 3: ziemniak, mango, melon, keira knightly
Jeśli wyszukiwanym słowem wprowadzonym przez użytkownika jest mango, wszystkie wyniki są zwracane poprawnie. Jeśli słowa są pomarańczowe I mango, wyniki 1 i 2 są zwracane (poprawnie). Teraz powiedzmy, że banan jest słowem kończącym (nie jest ... ale załóżmy, że tak jest), jeśli wyszukiwanie dotyczy pomarańczy, mango i banana, żadne wyniki nie są zwracane (ponieważ banan nie znajduje się w indeksie pełnotekstowym).
To, czego szukam, to to, czy ktoś inny napotkał ten problem i ma sposób obejścia go. Rodzaj an:
if 'banana' NOT STOP WORD match 'banana' against `words`. (OBVIOUSLY not real code).
... Albo ja po prostu będzie musiał upuścić listę stopword ...
co spróbowałeś? czy możesz podać nam przykład? – jcho360
Wygląda na to, że żadna z odpowiedzi nie dostarczyła tego, czego szukałeś. Zawsze można napisać kod aplikacji, aby ręcznie odfiltrować wszelkie hasła (jak również zbyt krótkie słowa) z zapytania. To prawdopodobnie zrobimy. –
2017 i ten sam problem tutaj. Wygląda na to, że pełne wyszukiwanie w mysql jest naprawdę kiepskie i brakuje podstawowych funkcji. – jgr