说有一些像
这样的字符串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'
但是,由于我们没有那个,还有其他办法吗? (除了后期处理;)
答案 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)仍然包括在内。模数运算的结果应该是有多少个单词)