我正在使用Tire进行elasticsearch。在我的应用程序中,我有2个模型。价格和产品。
我正在尝试搜索我的Price类,并:name
在搜索字段中使用它所属的产品的属性。现在,如果我有一个名为的产品,Product 1
并输入“
pro”,“ prod”或“ duct”,则没有结果。但是键入“产品”或“产品”会显示结果。我相信问题出在我的地图上。我查看了查询及其:
...localhost:3000/search/results?utf8=%E2%9C%93&query=product
我认为应该是:
...localhost:3000/search/results?utf8=%E2%9C%93&query:product=product
从以下问题
我不知道该如何使自己params[:query]
成为product.name
唯一。我尝试使用:string params[:query], default_field: "product.name"
但这没有用。
我不想使用该_all
领域。
这是我的代码:
Price.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
}
}
}
那么,有没有人有任何建议或知道如何将查询字段设置为仅使用产品名称?
谢谢。
这让我很头疼,所以我结束了去Ransack的工作,这简直太容易弄清楚和使用了。
问题内容: 我正在将ElasticSearch与Tire一起使用来对一些ActiveRecord模型进行索引和搜索,并且我一直在寻找索引和搜索关联的“正确”方法。我还没有找到最佳解决方案,所以我想问问是否有人采用他们认为确实有效的方法。 作为一个示例设置(已完成,但说明了问题),假设我们有一本书,带有章节。每本书都有标题和作者,以及许多章节。每章都有文字。我们希望为书的字段和章节的文本建立索引,以
主要内容:关联映射,反转,级联在前面的学习中,我们所涉及的都是基于单表的操作,但在实际的开发过程中,基本上都是同时对多张表的操作,且这些表都存在一定的关联关系。 Hibernate 是一款基于 ORM 设计思想的框架,它将关系型数据库中的表与我们 Java 实体类进行映射,表中的记录对应实体类的对象,而表中的字段对应着实体类中的属性。Hibernate 进行增删改查等操作时,不再直接操作数据库表,而是对与之对应的实体类对象进行
在我的数据库表中,我有一个列,它的内容可以是Y或N(CHECK约束)。我在Java中定义了一个String属性,在我的类中定义了一个基于String的setter。此外,为了方便起见,我添加了一个带有布尔参数的setter/getter。 那么,Hibernate基于什么属性进行映射呢?方法名称?参数名称?参数类型?在setter中使用可以吗?如果我的属性的名称与表列的名称不同,这会有什么不同吗?
MapStrut的新成员;对象到字符串错误: [错误] /util/LicenseMapper.java:[11,23]无法映射属性" Java . lang . object license . custom fields[]。值" to " Java . lang . string license . custom fields[]。值”。考虑声明/实现一个映射方法:“Java . lang
主要内容:映射类型,动态映射,映射参数映射是存储在索引中的文档的大纲。它定义数据类型,如或文档和规则中存在的字段的字符串和格式,以控制动态添加的字段的映射。 例如, 请求正文 响应 字段数据类型 Elasticsearch支持文档中字段的多种不同数据类型。以下数据类型用于在Elasticsearch中存储字段 - 核心数据类型 - 这些是几乎所有系统支持的基本数据类型,如整数,长整数,双精度,短整型,字节,双精度,浮点型,字符串,日期
第 7 章 关联关系映射