2017-11-08 7 views
0

저는 Postgres를 데이터베이스로 사용하는 Ruby-on-Rails 응용 프로그램에서 sunspot solr을 사용하고 있습니다. 테이블의 필드를 업데이트하고 solr을 사용하여 결과를 검색하면 이전 색인 데이터를 찾을 수 있습니다. 예를 들어 필드를 "Test 1"에서 "Test 2"로 변경하고 solr은 "Test 1"쿼리가있는 문서를 찾을 수 있지만 "Test 2"로 표시하고 "Test 2"를 찾을 수도 있습니다. 나는 문서를 업데이 트하는 동안 삭제 및 추가 작업을 수행해야하고 삭제 된 모든 문서를 건너 뛸해야하지만 내 경우에는 요청 중에 삭제 된 문서를 표시해야 solr을 이해합니다. 내가 "테스트 1"에서 제목 필드를 변경 한 경우, 예를 들어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"제목 찾기 문서 :

다음은 코드입니다.

도움과 조언을 많이 주셔서 감사합니다.

+0

와 같은 문제를 방지하는 방법하십시오이의 schema.xml 파일에서 문자열 필드에 대한 대소 문자를 구분 검색을위한 구성했다 코드 스 니펫을 공유하십시오. –

+0

문서를 삭제하면 삭제가 실행됩니까? Solr의 문서에 다른 ID가 있습니까? "Test 1"을 검색 할 때 Solr에서 문서를 검색하면 실제로 "Test 1"이 포함됩니까? (쿼리 연산자에 따라'Test '에 대한 적중 만 검색 할 수 있습니다). – MatsLindh

+0

문서를 삭제하지 않고 업데이트합니다. 나는 문서가 데이터베이스에서 동일한 id를 가지고 있다고 생각한다. Solr에서 문서를 검색하면 실제로 "Test 2"가 포함됩니다. –

답변

0

문제점을 발견했습니다.

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

질문은 여전히 ​​열려 : 대소 문자 구분 검색을 얻고 업데이트 문서 :