2013-10-23 36 views
1

我需要追加一個字符串從查詢中的特殊章程到rails中的elasticsearch。我嘗試使用.html_saferaw()它不會破壞任何東西,但它仍然通過章程作爲十六進制或其他東西。如何將多個查詢參數傳遞給使用gem的彈性搜索?

這些都通過同樣的事情elasticsearch

<%= @esearch.search q:params[:query] + '&pretty=true' do %> 

<%= @esearch.search q:params[:query] + '&pretty=true'.html_safe do %> 

<%= @esearch.search q:params[:query] + raw('&pretty=true') do %> 

我得到這個:

q=asa%26pretty%3Dtrue 

我希望能得到這樣的:

q=asa&pretty=true 

回答

0

你是不是運行到一個HTML轉義問題。 rawhtml_safe僅當您不希望輸出轉義時纔有用直接打印到用戶的瀏覽器。例如,如果您遇到html轉義問題,則參數會輸出q=asa&amp;pretty=true,但您不是。

你看到的是輸出url安全值的CGI.escape的結果。

它在我看來(根據您當前使用的search方法),哈希選項被轉換爲查詢參數。你有沒有試過這樣:

@esearch.search q: params[:query], pretty: true 

我不知道什麼search在做,但這似乎是一個奇怪的方法將在您的視圖直接使用。當然,我可能錯了,因爲我不知道它到底在做什麼。

UPDATE:

退房這裏的文檔:https://github.com/elasticsearch/elasticsearch-ruby/blob/master/elasticsearch-api/lib/elasticsearch/api/actions/search.rb#L15

有發送查詢參數的方式有兩種,它看起來像。其中一種是q: 'title:text'格式,這就是你發送你的params[:query](但它看起來像你的查詢只是'asa',所以我不確定你在哪裏使用正確的格式?),另一種是通過body哈希:

@esearch.search body: { 
    query: { match: { title: 'test' } }, 
    facets: { tags: { terms: { field: 'tags' } } } 
} 

你應該看看通過文件,包括鏈接到彈性文檔的搜索選項,找出你所需要的發送。我沒有在文檔中看到pretty: true選項,因此不確定這是什麼。但是有很多文件,我沒有真正看過他們,我會把它留給你。

+0

我想你釘了它。女巫只會帶我到另一個問題,我怎麼能阻止它發生?我確實嘗試了很好的:真實的,雖然它沒有破壞任何東西,但它確實修復了它。謝謝你的幫助。 – user2912426

+0

這是你使用的寶石嗎? https://github.com/karmi/retire還是別的嗎? – nzifnab

+0

我正在嘗試那個,和新的elasticsearch客戶端。新客戶是我的首選方法,但我似乎無法工作,並且沒有太多文檔。我認爲退休現在可能會更好,但我遇到了那個問題。 – user2912426