Elasticsearch,multi_match,ruby on rails

时间:2015-07-29 12:20:37

标签: ruby-on-rails elasticsearch

我想使用ElasticSearch搜索我的产品系列。

如果我有这样的对象:

{ name: "Product Name", producer: "Best Producer"}

我想通过搜索找到这个对象:

  1. 产品
  2. BES
  3. 名称
  4. 生产者
  5. best produc
  6. best nam
  7. 此代码效果很好,但例如“name”不是前缀:

    Product.search(
      {
        multi_match: {
          query: params[:search_input],
          type: "phrase_prefix",
          fields: ["name", "producer"],
          operator: "and"
        }
      })
    

    如何改进?

2 个答案:

答案 0 :(得分:0)

您可以对多重匹配参数使用bool,should和term。

       Product.search(:query => @query)

       @query = {
          :bool => {
              :must => @must_queries
          }
       }

       :bool => {
            :should => [
                {
                    :terms => {
                        :your_mathcing_field_name => value
                    }
                }
            ]
        }

您可以为每个字段添加多个字词。

答案 1 :(得分:0)

感谢您的回答。

我设法解决了这个问题。 这是我的解决方案:

Product.search(
  {
    multi_match: {
      query: params[:search_input],
      type: "best_fields",
      fields: ["name", "producer"],
      operator: "and"
    }
  }
)

我的映射如下所示:

mapping do
  indexes :name, type: :string, search_analyzer: :str_search_analyzer, index_analyzer: :str_index_analyzer
  indexes :producer, type: :string, search_analyzer: :str_search_analyzer, index_analyzer: :str_index_analyzer
end