代码之家  ›  专栏  ›  技术社区  ›  Zia Qamar

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

  •  0
  • Zia Qamar  · 技术社区  · 6 年前

    我在rails应用程序中使用ElasticSearchRails 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'),效果很好,但是没有找到带空格的名字('johndoe')。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Daniel Andres Acevedo    6 年前

    确保为查询构建了正确的语法,如果要在ES中精确匹配,则必须在QOUTE之间设置查询

    搜索字段:“daniel acevedo”

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