2012-09-11 29 views
0

我有一些在Elasticsearch(通過輪胎寶石)索引的Rails模型。我可以索引新文檔並查詢現有索引。輪胎寶石:如何訪問Elasticsearch的'突出'屬性?

我似乎無法做到的是在我的Rails應用程序中獲取連接到記錄的突出顯示。我可以但是,當我通過curl直接與Elasticsearch進行交互時,請參閱在json中返回highlight

當我嘗試訪問我的紀錄的highlight財產,我得到:undefined method 'highlight' for #<Report:0x007fe8afa54700>

# app/views/reports/index.html.haml 
%h1 Listing reports 
... 
    - @reports.results.each do |report| 
    %tr 
     %td= report.title 
     %td= raw report.highlight.attachment.first.to_s 

但是,如果使用curl我可以看到highlight返回到輪胎......

$ curl -X GET "http://localhost:9200/testapp_development_reports/report/_search?load=true&pretty=true" -d '{query":{"query_string":{"query":"contains","default_operator":"AND"}},"highlight":{"fields":{"attachment":{}}}}' 
{ 
    "took" : 1, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 1, 
    "successful" : 1, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 2, 
    "max_score" : 0.111475274, 
    "hits" : [ { 
     "_index" : "testapp_development_reports", 
     "_type" : "report", 
     "_id" : "1", 
     "_score" : 0.111475274, "_source" : {"id":1,"title":"Sample Number One",...,"attachment":"JVBERi0xMJ1Ci... ...UlRU9GCg==\n"}, 
     "highlight" : { 
     "attachment" : [ "\nThis <em>contains</em> one\n\nodd\n\n\n" ] 
     } 
    }, { 
     "_index" : "testapp_development_reports", 
     "_type" : "report", 
     "_id" : "2", 
     "_score" : 0.111475274, "_source" : {"id":2,"title":"Number two",...,"attachment":"JVBERi0xLKM3OA... ...olJVPRgo=\n"}, 
     "highlight" : { 
     "attachment" : [ "\nThis <em>contains</em> two\n\neven\n\n\n" ] 
     } 
    } ] 
    } 
} 

模型中的搜索方法:

... 
    def self.search(params) 
    tire.search(load: true) do 
     query { string params[:query], default_operator: "AND" } if params[:query].present? 
     highlight :attachment 
    end 
    end 
    ... 

回答

3

方法當您使用load: true選項時,highlight無法訪問。這應該在未來的Tire版本中得到修復。

編輯:您可以使用each_with_hit方法來訪問返回elasticsearch值現在

例如:

results = Article.search 'One', :load => true 
    results.each_with_hit do |result, hit| 
    puts "#{result.title} (score: #{hit['_score']})" 
end 
+0

你知道什麼時候以及如何修復嗎(直接訪問'@response ['hits'] ['hits']')?因爲我沒有發現有關它的任何信息。 –

0

您可以直接在這個帖子找到我的答案 Elasticsearch/Lucene highlight

我的方法工作正常對我而言,希望你也能得到它的工作。

相關問題