0
私は、データベースとしてPostgresのRuby-on-Railsアプリケーションでsunspot solrを使用しています。テーブルのフィールドを更新してsolrで結果を検索すると、古いインデックスデータを見つけることができます。たとえば、フィールドを「Test 1」から「Test 2」に変更し、solrは「Test 1」クエリを含むドキュメントを検索できますが、「Test 2」として表示し、「Test 2」も検索できます。 私が理解しているように、ドキュメントの更新は削除と追加操作を実行する必要があり、削除されたドキュメントはすべてスキップする必要がありますが、削除されたドキュメントは依然としてリクエスト中に表示されます。以下はsunspot solrが削除されたドキュメントを表示
は、コードスニペットです:たとえば
class Position < ActiveRecord::Base
........
searchable ignore_attribute_changes_of: [ :sha1hash ] do
text :title
text :description
text :account_location do
account.address.entire_address if account.address
end
text :account_name do
account.name
end
string :title
............
end
def search_index()
..............
Position.search(include: [{ account: :address }]) do |query|
query.without(:private, true)
query.with(:unconfirmed_account, false)
query.with(:account_name, params[:name]) if params[:name].present?
query.with(:title, params[:title]) if params[:title].present?
..............
query.paginate per_page: per_page, page: [params[:page].to_i, 1].max
end
end
、私は「テスト2」私はまだ「テスト1」のタイトルで文書を 見つけることができますし、「テスト1」からタイトルフィールドを変更した場合。
ご協力ありがとうございました
で、このような問題を回避するために、どのようにしてくださいそれはschema.xmlファイル内の文字列フィールドの大文字と小文字を区別しない検索のための構成でしたコードスニペットを共有します。 –
文書を削除すると削除が発行されますか? Solrの文書には異なるIDがありますか? 「テスト1」を検索するときにSolrからドキュメントを取得する場合、実際には「テスト1」が含まれていますか? (クエリ演算子に応じて、 'Test'のヒットのためだけに検索される可能性があります)。 – MatsLindh
文書を削除しないで、更新します。私はドキュメントがデータベースから同じidを持っていると思う。私がSolrからドキュメントを取得するとき、実際には「テスト2」が含まれています。 –