首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ThinkingSphinx中的字段特定搜索不起作用

ThinkingSphinx中的字段特定搜索不起作用
EN

Stack Overflow用户
提问于 2011-08-19 08:33:41
回答 1查看 280关注 0票数 0

我试图使用Thinking Sphinx在Rails中进行字段特定的搜索。

我有三张表,名为a,b,C,模型A,B,C。

表格内容:表A,B,C

代码语言:javascript
运行
复制
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秒。

代码语言:javascript
运行
复制
irb(main):021:0> @a = ThinkingSphinx.search "7-11 @city Portland", :match_mode=>:extended
=> []

我知道A桌有一张7-11,里面有波特兰市.所以让我们试试:

代码语言:javascript
运行
复制
irb(main):022:0> @a = A.search "7-11 @city Portland", :match_mode=>:extended
=> []

找到Costco与城市作为Astoria工作。

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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">]

我不知道为什么特定于字段的搜索适用于文本值,而不是当一个地方有一个包含所有数字和破折号的名称时。我已经阅读了文档,我只是不知道自己做错了什么。

--这就是工作原理:

代码语言:javascript
运行
复制
irb(main):026:0> @a = A.search "7-11"
=> [#<A id: 1, name: "7-11", city: "Portland">]

,这不是

代码语言:javascript
运行
复制
irb(main):027:0> @a = A.search "7-11 @city Portland", :match_mode=>:extended
=> []
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-21 00:55:06

啊,我想我知道这个问题-问题不是波特兰的城市过滤器,而是你在扩展查询中使用连字符的事实。A.search 'portland会返回记录吗?和A.search '@city portland', :match_mode => :extended

为了解决这个问题,您可以使用Riddle.escape来转义查询--这只会将\放在特殊字符的前面。另外,值得注意的是,您可以使用:conditions指定以字段为重点的搜索,并且自动将匹配模式设置为extended。

代码语言:javascript
运行
复制
A.search Riddle.escape('7-11'), :conditions => {:city => 'Portland'}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7118935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档