簡體   English   中英

匹配…反對沒有得出確切的結果

[英]MATCH … AGAINST doesn't come up with exact results

我第一次使用MATCH ... AGAINST在php sql中工作,但是有一個困擾我,我不知道該如何解決。 這是我的代碼:

SELECT * FROM m_artist WHERE match(artist_name) against('". $_POST['article_content'] ."' IN BOOLEAN MODE)

這是$_POST['article_content']:

Wildstylez Brothers Yeah Frontliner Waveliner

現在我的輸出應該是:Wildstylez,Frontliner和Waveliner,原因在我的數據庫中。 除了這樣做,我還得到了伏特加兄弟,Hardstyle的2個兄弟以及更多的原因。 如何解決SQL僅選擇文字匹配的問題?

全文搜索實際上是一個頗具誤導性的名稱:您可以通過查詢來搜索全文(就像google一樣),但這不能保證您,全文等於您的查詢。

因此,根據有關布爾全文本搜索的文檔,您的輸入Wildstylez Brothers Yeah Frontliner Waveliner被解釋為artist_name包含(至少) WildstylezBrothersYeahFrontlinerWaveliner 這就是為什么您得到the Vodka Brothers ,其中包括Brothers 出於類似於Google的目的,這就是您想要的,因為您想獲得一些您僅了解的東西的詳細信息,如向我展示music文章。

您可能要使用

artist_name LIKE '%name_part1%' OR artist_name LIKE '%name_part2%' ...

要么

artist_name IN ('exact_name1', 'exact_name2', ...)

最簡單的情況是做類似

$names = explode(' ', $_POST['article_content']);
$name_searches = array_map(function($a) {return 'artist_name = \''.mysql_real_escape_string($a).'\'';}, $names);
$sql = "SELECT * FROM m_artist WHERE ".implode(" OR ", $name_searches);

但是您會失去找到2 Brothers of Hardstyle因為名稱本身包含空格。

另一種方法是在所有單詞前面加上“ +”作為前綴,並堅持MATCH() AGAINST()然后您會發現只有包含每個給定單詞的藝術家。

如果這不是您想要的內容,請提供更多背景信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM