gpt4 book ai didi

ruby-on-rails - 如何修改轮胎过滤器的行为,使其匹配多个单词

转载 作者:行者123 更新时间:2023-12-02 23:41:15 25 4
gpt4 key购买 nike

我有一个 Item属于 Product 的模型模型。我要过滤Items使用 product.platform .我设置了一个委托(delegate)方法item.product_platform并索引了它的输出。

似乎轮胎/ES 仅按一个单词过滤,并且仅使用小写字母。所以:

item.product_platform = "Nintendo Wii"
filter :term, product_platform: "wii" # works
filter :term, product_platform: "nintendo" # works
filter :term, product_platform: "Wii" # does not work
filter :term, product_platform: "Nintendo" # does not work
filter :term, product_platform: "nintendo wii" # does not work
filter :term, product_platform: "Nintendo Wii" # does not work

但是当我传入一个精确的字符串时,我希望它返回一个结果,比如“Nintendo Wii”。

这是我的 item.rb
  belongs_to :product
delegate :platform, to: :product, prefix: true

def self.search(params)
tire.search do
query { string params[:query] } if params[:query].present?

filter :term, product_platform: params[:platform] if params[:platform]
end
end

def to_indexed_json
to_json(include: :product, methods: :product_platform)
end

这是我的映射:
  mapping date_detection: false do
indexes :id, type: 'integer'
indexes :user_id, type: 'integer'
indexes :product_id, type: 'integer'
indexes :product_platform
end

最佳答案

这是因为 elasticsearch 会分析和标记您放入索引中的所有内容,除非您另行配置。

根据您想要过滤的内容,您有几个选项:

  • 使用 :index => 'not_analyzed'
  • 使用 :analyzer => 'keyword'

  • 看看这个问题和喜欢的 github 问题: using elasticsearch to filter through tags with whitespace

    关于ruby-on-rails - 如何修改轮胎过滤器的行为,使其匹配多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430899/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com