2012-07-24 58 views
2

說有一些字符串像sphinxsearch中的「不接近」匹配?

sphinxQL> select * from rttest where match('beach'); 
+------+--------+---------------------------------------------+ 
| id | weight | value          | 
+------+--------+---------------------------------------------+ 
| 12 | 1576 | looking down on the beach from Beach Street | 
| 10 | 1555 | This is a beach        | 
| 11 | 1555 | photo of Beach Street      | 
+------+--------+---------------------------------------------+ 

如何能夠匹配那些包含「海灘」的文件,而不是當它只是「海灘街」短語的一部分。

這類作品:

sphinxQL> select * from rttest where match('beach -"beach street"'); 
+------+--------+-----------------+ 
| id | weight | value   | 
+------+--------+-----------------+ 
| 10 | 1527 | This is a beach | 
+------+--------+-----------------+ 

但最好我們應該得到的文件12爲好。因爲我們也有自己的海灘。

從海灘街

向下看海灘就排除了一句,不包括短語的所有文檔,無論它們只是單一的關鍵字匹配得。

喜歡的東西「不要靠近」將是理想的:

sphinxQL> select * from rttest where match('beach -NEAR/1 street'); 
ERROR 1064 (42000): index rttest: syntax error, unexpected TOK_NEAR near 'NEAR/1 street' 

但我們沒有這樣的,任何其他的方式做到這一點? (除了後期處理;)

+1

因爲現在看來它是不可能的。作爲功​​能請求添加... http://sphinxsearch.com/bugs/view.php?id=1259 – barryhunter 2012-07-29 21:31:44

回答

0

我不知道SphinxQL語法,但whate關於比賽附近和秩由DESC?

+2

我看不出如何,即使使用NEAR命令,它也會遇到與'beach - 「海灘街道」'即使有其他比賽也排除文檔。 (加上排名desc是默認情況下) – barryhunter 2013-05-08 14:07:04

0

那麼萬一任何人發現這一點,我已經找到了一個解決方法。張貼在獅身人面像論壇:

http://sphinxsearch.com/forum/view.html?id=9869

但快速摘要

select *,weight() MOD 4 AS w from from rttest 
    where match('beach | "beach street" | "beach street" | "beach street" ') 
    and w > 0 order by w desc option ranker=wordcount; 

+------+---------------------------------------------+------+ 
| id | value          | w | 
+------+---------------------------------------------+------+ 
| 10 | This is a beach        | 1 | 
| 12 | looking down on the beach from Beach Street | 1 | 
+------+---------------------------------------------+------+ 

這對包括與 '海灘' 的文件,任何與只是 '海灘街' 是排除

(因爲「沙灘街道」匹配所有4個項目,排除4的倍數。如果有單獨沙灘 - 自己或以及短語,它不再是完全4(例如1或5),所以仍然包括在內,模數運算的結果應該是有多少單字)