2016-03-01 34 views
0

我有一个与Post模型和body:text与文本宝石的导轨(4.2.3)博客应用程序。使用textacular gem,我如何匹配大量文本中的一个单词?

创建帖子:

> my_post = Post.create! title: 'my post', body: 'this post is about physics and ...' 

现在,我要为“物理”相匹配的身体进行搜索,但事实并非如此。如果我尝试:

> Post.basic_search('physics').first #=> nil 

如果我改变身体更短,它的工作原理:

> my_post.body = "about physics" 
> my_post.save! 
> Post.basic_search('physics').first #=> <my_post> 

我也试过fuzzy_search,而不是基本的搜索,但它给出了相同的结果。

如何使用textacular在长文本字段中搜索单词的存在?在Github上

回答

0

自述说Model.basic_search将搜索模式的唯一string列:

Game.basic_search('Sonic') # will search through the model's :string columns 
Game.basic_search(title: 'Mario', system: 'Nintendo') 

并为fuzzy searches自述说:

注意,模糊搜索是受到强加的相似性阈值pg_trgm模块。默认值为0.3,表示总字符串中至少有30%必须与您的搜索内容匹配。

您可以在大文本字段上将相似性阈值设置为非常小的值。

参考:Github

+0

basic_search似乎与所有stringish下地干活(全文收录)。设置fuzzy_search阈值是非常不明确的,因为我不知道字段长度是多少,所以任何猜测在较低的阈值只是一个猜测。如果我设置的阈值太低,那么即使完全不相关的记录着陆匹配。 – Anand

0

最后我用杜松子酒指数像这样,然后给我我想要的比赛(与basic_search:

# in a migration 
execute "create index on posts using gin(to_tsvector('english', body));" 

# console query 
> my_post = Post.create! title: 'my post', body: 'this post is about physics and ...' 
> Post.basic_search('physics').first #=> <my_post>  
相关问题