簡體   English   中英

Elasticsearch-具有多重匹配的范圍過濾器?

[英]Elasticsearch - range filter with multimatch?

我正在使用彈性搜索來過濾服裝:

  def self.search(query)
  __elasticsearch__.search(
  {
    query: {
      function_score: {
        query: {
          multi_match: {
            query: query,
            fields: ['description^30','material^10']
          },
        },
        field_value_factor: {
          field: "purchased"
        },
      }
    }
  }
)

結束

問題是我似乎無法按購買次數來過濾它們,如下所示:

      range: {
              purchased: {
                gte: 1000
             }
      }

無論我在哪里放置它,都會給我以下錯誤:

[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"[range] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":88}],"type":"parsing_exception","reason":"[range] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":88},"status":400}

如何正確編寫范圍過濾器/輸入代碼? 有什么地方我可以閱讀有關此內容的更多信息,以了解應如何安排哈希值?

您可以使用bool/filter查詢來做到這一點:

  def self.search(query)
  __elasticsearch__.search(
  {
    query: {
      function_score: {
        query: {
          bool: {
            filter: [
              {
                multi_match: {
                  query: query,
                  fields: ['description^30','material^10']
                }
              },
              {
                range: {
                  purchased: { gte: 1000}
                }
              }
            ]
          }
        },
        field_value_factor: {
          field: "purchased"
        }
      }
    }
  }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM