簡體   English   中英

我錯過了Solr-Sunspot設置的哪一部分?

[英]What part of this Solr-Sunspot setup am I missing?

我以為我有這個蛋糕..但任何時候我對任何關鍵字進行查詢它不會從SQL加載任何表。 我沒有錯。

user.rb

searchable do
  string  :first_name
  string  :last_name
  string  :name
  string  :email
  time    :created_at
end

users_controller.rb

class Admin::UsersController < Admin::ApplicationController

  def index
    s = Sunspot.search User do |query|
      query.keywords params[:q]
      query.any_of do |any_of|
        any_of.with(:first_name)
        any_of.with(:first_name)
        any_of.with(:email)
        any_of.with(:name)
      end
      query.paginate :page => (params[:page] && params[:page].to_i || 1), :per_page => 20
      query.order_by('created_at', 'desc')
    end

    s.execute!
    @users = s.results

    render :action => 'index'
  end

然后我跑了:

$> script/console
$> User.reindex

當我完全沒有搜索時..成功顯示所有User結果

相信我要將所有這些字符串標記轉換為文本標記,但會返回此錯誤:

Sunspot::UnrecognizedFieldError in Admin/usersController#index

No field configured for User with name 'first_name'

為了回應關鍵字,我錯過了什么?

(對您自己的自我跟進的更完整的解釋。)

關於你的設置:

searchable do
  string  :first_name
  string  :last_name
  string  :name
  string  :email
  time    :created_at
end

Solr中的字符串旨在用於完全匹配。 它不像文本列那樣進行預處理或標記。 這些文字匹配用於過濾(“category_name等於'Sale'”),分面,排序等。

您更可能想要text字段。 文本字段使用標准標記進行標記,使用LowerCase過濾器進行小寫,並使用標准過濾器刪除其點和撇號以及許多其他可能的選項。

當人們想到Solr全文搜索的功能時,他們會考慮如何處理text字段。

此外,Sunspot的keywords搜索方法默認搜索所有文本字段,這解釋了當您包含keywords時未獲得結果的原因 - 您的文檔沒有要搜索的文本字段。

正如您在自我跟進中所述,您需要切換到text字段以獲得您期望的結果。

這不是最好的答案,但我發現將字符串和文本標簽組合在一起就可以了。 所以我的用戶模型看起來像這樣:

searchable do
  text  :first_name
  text  :last_name
  text  :name
  text  :email
  time  :created_at
  string :first_name
  string :last_name
  string :name
  string :email
end

暫無
暫無

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

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