0

我正在使用 SphinxQL 使用 Sphinx 搜索引擎开展项目。我的问题如下:

这是我的 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 查询在布尔模式下工作 - 因此对 Honda CBR 1000 的查询也会找到 Honda VTR 1000,我认为......

那么,接近第二个结果集的最佳搜索模式是什么?谁能解释我什么是完美模式以及如何(示例)以正确的方式编写 sphinxql 查询?

谢谢。提前...

4

1 回答 1

1

主要区别在于 MySQL 的“布尔”模式隐式运算符是OR。多词查询只需要其中一个词(除非带有 + 前缀)

但是 Sphinxes 的“扩展匹配”模式(这是 sphinxQL 使用的),隐式运算符是AND。所以它需要所有的单词。

可以使用他的仲裁运算符来获得默认的“或”行为

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

即只需要其中一个词。

--

MySQL 查询在布尔模式下工作 - 因此对 Honda CBR 1000 的查询也会找到 Honda VTR 1000,我认为......

嗯,是。但是因为只需要一个字,即使不是本田,也可以找到所有带有“1000”字样的文件。这就是为什么这三个词有更多文档的原因。

于 2015-11-27T17:26:47.920 回答