2017-11-08 3 views
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」からタイトルフィールドを変更した場合。

ご協力ありがとうございました

+0

で、このような問題を回避するために、どのようにしてくださいそれはschema.xmlファイル内の文字列フィールドの大文字と小文字を区別しない検索のための構成でしたコードスニペットを共有します。 –

+0

文書を削除すると削除が発行されますか? Solrの文書には異なるIDがありますか? 「テスト1」を検索するときにSolrからドキュメントを取得する場合、実際には「テスト1」が含まれていますか? (クエリ演算子に応じて、 'Test'のヒットのためだけに検索される可能性があります)。 – MatsLindh

+0

文書を削除しないで、更新します。私はドキュメントがデータベースから同じidを持っていると思う。私がSolrからドキュメントを取得するとき、実際には「テスト2」が含まれています。 –

答えて

0

私はこの問題を発見しました。

<fieldType name="string" class="solr.TextField" omitNorms="true"> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

質問がまだ開いている:大文字と小文字を区別しない検索を取得し、更新文書:)

関連する問題