1

我需要将带有特殊章程的字符串从查询附加到 Rails 中的 elasticsearch。我尝试使用.html_saferaw()它不会破坏任何东西,但它仍然以十六进制或其他方式通过章程。

这些都将相同的东西传递给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
4

1 回答 1

0

您没有遇到 html 转义问题。 raw并且仅在您不希望直接打印到用户浏览器html_safe时输出转义时才有用。例如,如果您遇到 html 转义问题,params 会输出,但事实并非如此。q=asa&amp;pretty=true

您所看到的是CGI.escape输出 url 安全值的结果。

在我看来(基于您当前对该search方法的使用),哈希选项被转换为查询参数。你有没有试过这个:

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

我不确定search在做什么,但这似乎是一种直接在您的视图中使用的奇怪方法。当然我可能是错的,因为我不知道它在做什么。

更新:

在此处查看文档: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在文档中看不到该选项,因此不确定其用途。但是有很多文档,我并没有真正广泛地查看它们,我将把它留给你。

于 2013-10-23T19:25:21.807 回答