2013-04-14 44 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