gpt4 book ai didi

ruby-on-rails - Elasticsearch /轮胎 : How to map to association attribute?

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:40 24 4
gpt4 key购买 nike

我正在使用 Tire用于 Elasticsearch 。在我的应用程序中,我有 2 个模型;价格和产品。

我正在尝试搜索我的 Price 类并使用它所属的 Product 的 :name 属性作为搜索字段。现在,如果我有一个名为 Product 1 的产品并输入“pro”、“prod”或“duct”,则不会出现任何结果。但是键入“product”或“Product”会显示结果。我相信问题出在我的映射上。我查看了查询及其:

...localhost:3000/search/results?utf8=%E2%9C%93&query=product

当我认为应该是:

...localhost:3000/search/results?utf8=%E2%9C%93&query:product=product

根据这个问题判断:ElasticSearch mapping doesn't work

我不知道如何让我的 params[:query] 只接受 product.name。我尝试使用:string params[:query], default_field: "product.name" 但没有用。

我不想使用 _all 字段。

这是我的代码:

价格.rb

  include Tire::Model::Search
include Tire::Model::Callbacks

def self.search(params)
tire.search(load: true, page: params[:page], per_page: 20) do
query do
boolean do
must { string params[:query] } if params[:query].present?
must { term :private, false }
end
end
sort do
by :date, "desc"
by :amount, "asc"
end
end
end

def to_indexed_json
to_json( include: { product: { only: [:name] } } )
end

mapping do
indexes :id, type: "integer"
indexes :amount, type: "string", index: "not_analyzed"
indexes :date, type: "date", index: "not_analyzed"
indexes :private, type: "boolean"
indexes :product do
indexes :name, type: "string", analyzer: "custom_analyzer"
end
end

settings analysis: {
analyzer: {
custom_analyzer: {
tokenizer: [ "whitespace", "lowercase" ],
filter: [ "ngram_filter", "word_delimiter_filter" ],
type: "custom"
}
},
filter: {
ngram_filter: {
type: "nGram",
min_gram: 2,
max_gram: 15
}
},
filter: {
word_delimiter_filter: {
type: "word_delimiter",
generate_word_parts: true,
generate_number_parts: true,
preserve_original: true,
stem_english_possessive: true
}
}
}

那么有没有人有任何建议或知道如何将查询字段设置为仅使用产品名称?

谢谢。

最佳答案

当你做的时候

 query   { string params[:query] } 

并且查询未指定字段,您正在搜索神奇的 _all 字段。该字段有自己的分析器设置 - 它不会使用您为姓名字段设置的设置。

您可以配置 _all 字段以使用您的分析器,更改默认分析器或更改您的查询以专门查询 name 字段,例如

 query { string params[:query], :default_field => 'name'}

关于ruby-on-rails - Elasticsearch /轮胎 : How to map to association attribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12072319/

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