2013-10-23 66 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