sphinxsearch中的“NOT NEAR”匹配?

时间:2012-07-24 17:15:49

标签: full-text-search sphinx

说有一些像

这样的字符串
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号文件。因为我们也有自己的海滩。

  

俯视海滩街的海滩

只要排除短语,就会排除包含短语的所有文档,无论它们是否只匹配单个关键字。

像'NOT NEAR'之类的东西是理想的:

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

但是,由于我们没有那个,还有其他办法吗? (除了后期处理;)

2 个答案:

答案 0 :(得分:0)

我不知道SphinxQL语法,但是关于匹配接近和按排名DESC排序?

答案 1 :(得分: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)仍然包括在内。模数运算的结果应该是有多少个单词)