2013-04-14 42 views
1

我试图通过轮胎/弹性搜索实现“示波器”功能。为什么这不起作用,即使我有状态为“Test1”或“Test2”的条目?结果总是空的。轮胎术语过滤器不工作

collection = @model.search(:page => page, :per_page => per_page) do |s| 
    s.query {all} 
    s.filter :terms, :status => ["Test1", "Test2"] 
    s.sort {by :"#{column}", "#{direction}"} 
    end 

该方法工作正常,没有过滤器。过滤方法有问题吗?!我已经检查了轮胎doku ....它应该工作。

谢谢! :)

回答

5

你的问题是最有可能被使用的缺省映射为status领域,这将令牌化就引起 - downcase,分裂成的话,等

比较这两种:

http://localhost:9200/myindex/_analyze?text=Text1&analyzer=standard 

http://localhost:9200/myindex/_analyze?text=Text1&analyzer=keyword 

您的解决方案是在您的映射中使用keyword分析器(或将字段设置为not_analyzed)。当该字段不是“枚举”类型的数据时,可以使用multi-field功能。

的工作Ruby的版本是这样的:

require 'tire' 

Tire.index('myindex') do 
    delete 
    create mappings: { 
    document: { 
     properties: { 
     status: { type: 'string', analyzer: 'keyword' } 
     } 
    } 
    } 

    store status: 'Test1' 
    store status: 'Test2' 

    refresh 
end 

search = Tire.search 'myindex' do 
    query do 
    filtered do 
     query { all } 
     filter :terms, status: ['Test1'] 
    end 
    end 
end 

puts search.results.to_a.inspect 

注:这几乎是不可能的 - 这种情况下是一个例外 - 提供合理的建议时,没有索引映射,例如数据等提供。

+0

感谢Karmi,我已经改变了分析仪,并且一切正常。真棒支持! :) – patrickkeller

+0

@karmi:感谢那个完整的轮胎你好,世界的例子 – ib84