弹性搜索结果未搜索单词之间的空格

时间:2019-02-22 10:27:12

标签: ruby-on-rails elasticsearch

我在rails应用程序中使用elasticsearch-rails gem。一切都已设置,但是当我搜索两个单词之间有空格时遇到麻烦。 这是我的代码:

SEARCH_FIELDS = %w"name email"
attribute :text, type: String, default: ''

response = MyModelName.search([query, filter, sort].compact.reduce(:merge)).page(page).per(per_page)
  def query
    query = {}.tap do |q|
      q[:query_string] = {query: text, default_operator: 'AND', fields: SEARCH_FIELDS, allow_leading_wildcard: true}
    end
    return {query: query}
  end

  def filter
    filters = []
    filters << {term: {user_id: user_id}}
    filters << {term: {hide: (hide.nil? ? false : hide)}}
    return {filter: {and: filters}}
  end

如果我搜索名称首字母缩写(如“ John”)的首字母缩写词效果很好,但未找到带有空格(“ John doe”)的名字。

1 个答案:

答案 0 :(得分:0)

确保您要为查询构建正确的语法,是否要在ES中实现完全匹配,必须在qoutes之间设置查询

search_field:“丹尼尔·阿塞维多”

   {          
      "size": 10,
      "query": {
        "query_string": {
          "query": "search_field:\"daniel acevedo\""

        }
      }
    }