【问题标题】:Add Filter To ElasticSearch Query向 ElasticSearch 查询添加过滤器
【发布时间】:2018-02-17 14:07:34
【问题描述】:

我正在尝试创建一个查询,用户可以在其中搜索品牌字段等于某个字符串的 ES 文档。这是我目前拥有的查询,但没有过滤。我正在将 elasticsearch-rails 与 Ruby on Rails 一起使用。

@products = Product.search(
     query:{
        function_score:{
          query: {    
            multi_match: {
              fields: ['brand^5', '_all'],
              query: "#{query}",
              fuzziness: "AUTO"
            }
          },
          field_value_factor:{
            field: "popularity",
            modifier: "log1p"
          }
        }
     }).page(page).per(25)

出于测试目的,我已为过滤器静态分配了品牌名称。在这种情况下,用户应该会看到品牌名称为“NordicTrack”的搜索关键字的结果。

query:{
        function_score:{
          query: {    
            multi_match: {
              fields: ['brand^5', '_all'],
              query: "#{query}",
              fuzziness: "AUTO"
            }
          },
          filter: {
            term: {"brand":"NordicTrack"}
          }, 
          field_value_factor:{
            field: "popularity",
            modifier: "log1p"
          }
        }
     }
     ).page(page).per(25)

这个查询给了我以下错误:

[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139}],"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139},"status":400}

我不确定为什么这不起作用。任何帮助将不胜感激!

【问题讨论】:

  • 很奇怪,它应该可以工作。你的弹性搜索版本是什么?你可以试试term: {brand: 'NordicTrack'} 作为过滤器吗?

标签: ruby-on-rails ruby elasticsearch ruby-on-rails-5 elasticsearch-rails


【解决方案1】:

我不确定 Elasticsearch-rails 与 Ruby on Rails 如何解析查询。但我在 Kibana 中尝试了以下查询:

GET test/testt/_search
{
  "query": {
    "filter": {
      "term": {
        "brand": "NordicTrack"
      }
    }
  }
}

这有点类似于你的查询部分,它给你错误,我也得到了同样的错误。 但是当我用 bool 查询包装术语查询时,它会返回所需的结果。查询:

GET test/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "brand": "NordicTrack"
        }
      }
    }
  }
}

试一试。

【讨论】:

    【解决方案2】:

    尝试使用这样的过滤查询:

      query: {
        function_score: {
          query: {
            filtered: {
              query: {
                multi_match: {
                  fields: ['brand^5', '_all'],
                  query: "#{query}",
                  fuzziness: "AUTO"
                }
              },
              filter: {
                term: {
                  brand: "NordicTrack"
                }
              }
            }
          },
          field_value_factor:{
            field: "popularity",
            modifier: "log1p"
          }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多