我试图使用Thinking Sphinx在Rails中进行字段特定的搜索。
我有三张表,名为a,b,C,模型A,B,C。
表格内容:表A,B,C
mysql> select * from a;
+----+--------+----------+
| id | name | city |
+----+--------+----------+
| 1 | 7-11 | Portland |
| 2 | Costco | Bend |
| 3 | Costco | Astoria |
+----+--------+----------+
3 rows in set (0.00 sec)
mysql> select * from b;
+----+--------+---------+
| id | name | city |
+----+--------+---------+
| 1 | 7-11 | Bend |
| 2 | Costco | Astoria |
| 3 | Costco | Bend |
+----+--------+---------+
3 rows in set (0.00 sec)
mysql> select * from c;
+----+--------+---------+
| id | name | city |
+----+--------+---------+
| 1 | 7-11 | Astoria |
| 2 | Costco | Astoria |
| 3 | Costco | Bend |
+----+--------+---------+
3 rows in set (0.00 sec)
这就是我在控制台中使用应用程序范围搜索所做的工作:
目标:在波特兰市显示所有7-11秒。
irb(main):021:0> @a = ThinkingSphinx.search "7-11 @city Portland", :match_mode=>:extended
=> []
我知道A桌有一张7-11,里面有波特兰市.所以让我们试试:
irb(main):022:0> @a = A.search "7-11 @city Portland", :match_mode=>:extended
=> []
找到Costco与城市作为Astoria工作。
irb(main):023:0> @a = ThinkingSphinx.search "costco @city Astoria", :match_mode=>:extended
=> [#<B id: 2, name: "Costco", city: "Astoria">, #<A id: 3, name: "Costco", city: "Astoria">, #<C id: 2, name: "Costco", city: "Astoria">]
Costco with Bend works:
irb(main):023:0> @a = ThinkingSphinx.search "costco @city Astoria", :match_mode=>:extended
=> [#<B id: 2, name: "Costco", city: "Astoria">, #<A id: 3, name: "Costco", city: "Astoria">, #<C id: 2, name: "Costco", city: "Astoria">]
我不知道为什么特定于字段的搜索适用于文本值,而不是当一个地方有一个包含所有数字和破折号的名称时。我已经阅读了文档,我只是不知道自己做错了什么。
--这就是工作原理:
irb(main):026:0> @a = A.search "7-11"
=> [#<A id: 1, name: "7-11", city: "Portland">]
,这不是
irb(main):027:0> @a = A.search "7-11 @city Portland", :match_mode=>:extended
=> []
发布于 2011-08-21 00:55:06
啊,我想我知道这个问题-问题不是波特兰的城市过滤器,而是你在扩展查询中使用连字符的事实。A.search 'portland
会返回记录吗?和A.search '@city portland', :match_mode => :extended
为了解决这个问题,您可以使用Riddle.escape来转义查询--这只会将\
放在特殊字符的前面。另外,值得注意的是,您可以使用:conditions
指定以字段为重点的搜索,并且自动将匹配模式设置为extended。
A.search Riddle.escape('7-11'), :conditions => {:city => 'Portland'}
https://stackoverflow.com/questions/7118935
复制相似问题