0
나는 일부 데이터 감안할 때 여러 속성검색 및 순위 결과
에 문자열을 검색 할 상대적으로 간단한 알고리즘을 작성하려고 해요 :
일부 데이터 :
1: name: 'Josh', location: 'los angeles'
2: name: 'Josh', location: 'york'
검색 문자열 : "josh york"
쿼리 문자열은 두 번째 레코드에 두 번 도달하므로 결과는 [2, 1]이어야하며 첫 번째 r 한 번 ecord.
대소 문자를 구분하지 않는 것이 안전합니다. 그래서 여기
내가 루비/활성 레코드에, 지금까지이 무엇 :이 방법이
query_string = "josh new york"
some_attributes = [:name, :location]
results = {}
query_string.downcase.split.each do |query_part|
some_attributes.each do |attribute|
find(:all, :conditions => ["#{attribute} like ?", "%#{query_part}%"]).each do |result|
if results[result]
results[result] += 1
else
results[result] = 1
end
end
end
end
results.sort{|a,b| b[1]<=>a[1]}
문제는 쿼리 많은 수의 (query_string.split.length * some_attributes을 생산한다는 것입니다. 길이).
어쨌든 에 의해 더 효율적으로 만들 수 있습니까??
루비 내에서 정렬해도 문제가 없지만 SQL에 너무 복잡해지면 괜찮습니다.
"모든 기능을 갖춘"텍스트 검색 "엔진"은 한 테이블에서 두 개의 열을 검색 할 때 과도하다고 생각합니다. 여기에 간단한/가벼운 무게로 간다. – jsharpe