我需要在查询中将带有特殊章程的字符串附加到rails中的elasticsearch。我尝试使用.html_safe
和raw()
它不会破坏任何内容,但它仍然以十六进制或其他方式传递给章程。
这些都将同样的东西传递给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 :(得分:0)
您没有遇到html转义问题。只有在直接打印到用户的浏览器时不希望输出转义时,raw
和html_safe
才有用。例如,如果遇到html-escaping问题,params会输出q=asa&pretty=true
,但你不是。
您看到的是输出网址安全值的CGI.escape
的结果。
它(根据您当前使用的search
方法)向我看,哈希选项被转换为查询参数。你试过这个:
@esearch.search q: params[:query], pretty: true
我不确定search
正在做什么,但这似乎是一种在视图中直接使用的奇怪方法。当然我可能错了,因为我不确切知道它在做什么。
更新:
有两种发送查询参数的方法,看起来像。一种是使用q: 'title:text'
格式,这就是您发送params[:query]
的内容(但看起来您的查询只是'asa'所以我不确定您是否使用了正确的格式?),另一个是通过body
哈希:
@esearch.search body: {
query: { match: { title: 'test' } },
facets: { tags: { terms: { field: 'tags' } } }
}
您应该查看该文档,包括弹性搜索选项文档的链接,并找出发送它所需的内容。我没有在文档中看到pretty: true
选项,所以不确定它是什么。但是有很多文档,而且我并没有真正地看到它们,我会把它留给你。