2015-11-27 22 views
0

我正在使用SphinxQL開發一個使用Sphinx搜索引擎的項目。我的問題是這樣的:SphinxQL - 1至4個字的完美搜索模式

這是我sphinxql查詢:

"SELECT *, country FROM all_gebrauchte_products WHERE MATCH('@searchtext (".$searchQuery.")') AND country='".$where."' ORDER BY WEIGHT() DESC LIMIT ".$page.", ".$limit." OPTION ranker=expr('sum(lcs)')" 

結果相差非常強烈,如:

Honda => 50 results 
Honda CBR => 9 results 
Honda CBR 1000 => 2 results 

這是我的MySQL查詢:

SELECT COUNT(*) FROM all_gebrauchte_products WHERE MATCH(gebr_id, gebr_hersteller, gebr_modell, gebr_ukat, gebr_kat, gebr_bemerkung) AGAINST ('".$searchQuery."' IN BOOLEAN MODE); 

結果是:

Honda => 67 results 
Honda CBR => 67 results 
Honda CBR 1000 => 84 results 

MySQL查詢工作在布爾模式 - 使查詢本田CBR 1000還發現本田VTR 1000,因爲我覺得......

那麼,什麼是最好的搜索模式來接近第二個結果組? 任何人都可以解釋我什麼是完美的模式,以及如何(例如)以正確的方式編寫sphinxql查詢?

Thnx。提前...

回答

1

主要區別是MySQL的'布爾'模式隱式運算符是。多字查詢只需要其中一個字(除非前綴加+)

但是Sphinxes'擴展匹配'模式(這是sphinxQL使用的模式),隱式運算符是AND。所以它要求所有的話。

能借用他法定人數運營商獲得一個默認「或」

... MATCH('@searchtext (\"".$searchQuery."\"/1)') ... 

即只有一個的話是必需的行爲。

-

MySQL查詢工作在布爾模式 - 使查詢本田CBR 1000還發現本田VTR 1000,因爲我覺得......

嗯,是。但是,因爲只需要一個字,查找所有與他們說'1000'的文件,即使不是本田。這就是爲什麼三個詞有更多的文件。

+0

謝謝巴里,這只是一種魅力。一個爲您的巨大幫助! –