ruby-on-rails - 如何在Rails中使用elasticsearch来搜索category.name?

标签 ruby-on-rails elasticsearch

我的搜索工作正常。
但是我必须键入“1”或“2”才能获得“室友”或“子租约”的结果。
模型有一个称为category_id的列,它是一个整数。
模型Category的列:name是字符串。

因此,我有category_id 1是“roommate”,2是“sublet”

以下是我的房屋模型:

class Housing < ActiveRecord::Base
    extend FriendlyId
    friendly_id :title, use: :slugged
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks

    belongs_to :user
    belongs_to :category

    validates :title, :presence => true
    validates :category_id, :presence => true
    validates :created_at, :presence => false
    validates :user_email, :presence => true
    validates :description, :presence => false
    validates_length_of :title, :maximum => 30

    def self.search(query)
      __elasticsearch__.search(
        {
          query: {
            # multi_match: {
            simple_query_string: {
              query: query,
              fields: ['title^10', 'category_id']
            }
          }
        }
      )
    end

end

我该如何解决fields: ['title^10', 'category_id'],以便用户可以搜索“roommate”而不是必须搜索整数“1”来获得Roommate的结果?

我尝试了fields: ['title^10', 'category.name'],但无法正常工作。

最佳答案

除非您定义了正确的映射,否则fields: ['title^10', 'category.name']将不起作用。 Elasticsearch不了解您的关联。 ES是一个文档存储,并使用其自己的文档存储来搜索记录。因此,除非您将类别名称添加到ES中存储的文档中,否则您将无法搜索它。
TL;DR
定义一个映射。例:

mapping dynamic: 'strict' do
    indexes :category do
      indexes :name
    end
    indexes :title
end

此处类别现在将作为嵌套对象存储在索引内,因此可以使用category.name搜索

关于ruby-on-rails - 如何在Rails中使用elasticsearch来搜索category.name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36830952/

相关文章:

ios - Facebook SDK iOS 连接的 Rails-api 身份验证?

ruby-on-rails - HTTPS 在 Chrome 上显示,但在 Safari 上不显示

ruby-on-rails - heroku/memcache 和 dalli 的奇怪缓存问题

elasticsearch - 从 SQL Server 到 ElasticSearch 节点的数据传输

ruby-on-rails - 在 Rails 中登录时显示不同的文本

ruby-on-rails - 我正在尝试优化我的 ruby​​ else if 语句

apache - 将 Solr (4.8.1) 指向目录 (Windows 7)

elasticsearch - elasticsearch查询字符串不按单词部分搜索

elasticsearch - 处理Elasticsearch中的重复记录

rest - 进行 REST 查询的问题,elasticsearch