Я хочу написать логический полнотекстовый поисковый запрос в MySQL. Но я хочу, чтобы иметь результаты в таком порядке: (. >
означает выше)MySQL логический полнотекстовый поиск с подвыражениями
Exact Matches
>Including all the words
>Including some of the words
С помощью следующего запроса, я получаю точные совпадения выше:
SELECT *, MATCH(name,description,address)
AGAINST('>("word1 word2 word3") <(word1 word2 word3)' IN BOOLEAN MODE)
AS score FROM samples WHERE MATCH(name,description,address)
AGAINST('>("word1 word2 word3") <(word1 word2 word3)' IN BOOLEAN MODE) ORDER BY score DESC
Со следующим запросом я получаю документы, которые содержат все слова выше, чем те, которые содержат часть запроса:
SELECT *, MATCH(name,description,address)
AGAINST('>(+word1 +word2 +word3) <(word1 word2 word3)' IN BOOLEAN MODE)
AS score FROM samples WHERE MATCH(name,description,address)
AGAINST('>(+word1 +word2 +word3) <(word1 word2 word3)' IN BOOLEAN MODE) ORDER BY score DESC
Но я хочу объединить эти два вопроса. Это лучшее, что я дошел до сих пор, но я не получаю результаты, которые я хочу.
SELECT *, MATCH(name,description,address)
AGAINST('>("word1 word2 word3") <(>(+word1 +word2 +word3) <(word1 word2 word3))' IN BOOLEAN MODE)
AS score FROM samples WHERE MATCH(name,description,address)
AGAINST('>("word1 word2 word3") <(>(+word1 +word2 +word3) <(word1 word2 word3))' IN BOOLEAN MODE)
ORDER BY score DESC
Есть ли способ сделать это без UNIONs?
Невозможно сделать это, если есть более двух слов, чтобы соответствовать как 'match (..) против ('> frist second third')'. Возможно, вам придется идти только с «union». –