2012-06-04 4 views
1

Solr 서버를 사용하여 위치 (도시, 지역, 국가, 개체) 퍼지 검색을 구현하려고합니다. 현재 색인에는 약 0.8-1.0 M 개의 항목이 포함되어 있습니다. 퍼지 검색 (~ 0.7)을 사용하면 정말 잘 작동하지만 너무 느립니다 (0.2 ~ 0.6 초). 사용 된 토크 나이저는 <tokenizer class="solr.StandardTokenizerFactory"/>입니다. 대안으로 나는 <tokenizer class="solr.WhitespaceTokenizerFactory"/>을 시도했다 - 성능면에서 (약 100 배 더 빠르다) 훌륭하지만 퍼지 검색을 제공하지 않는다. (Solr/Lucene 퍼지 검색이 너무 느림

내가 사용할 수있는 다른 접근법을 알고 있는가? 퍼지 검색을 사용하고 싶다. 기능을하지만 훨씬 더 빠른 방법으로,

감사합니다. 가능하면 많은!

+0

당신이 찾고있는 퍼지 검색의 예를 제공 할 수 있습니까? 나는 사용자 유형이 q = 캘리포니아 ~ 인 경우 귀하의 결과가 어떻게 보이는지 가정합니다. – Yavar

+0

예. 좋은 예로서 나는 이름을 말할 것입니다. "Guadelupe"~ 0.7은 "Guageloupe"와 일치합니다. 첫 번째 경우 (StandardTokenizer)에서는 단어가 짧은 토큰으로 토큰 화되기 때문에 작동합니다. WhitespaceTokenizer의 경우, 각 토큰은 실제로 하나의 단어입니다.색인은 작아서 빠르지 만 관련성은 더 나쁩니다. 어떻게 생각해? –

답변

2

귀하의 문제는 당신이 인덱스에 ~ Califrna 모든면에 걸쳐 0.7 루씬 반복 검색 사용하는 분석기.에 관련되지 않고, "Califrna"와 모든 단어 사이의 (Levenshtein) 편집 거리를 계산합니다. 이것은 매우 비싼 작업입니다.

이 문제는 Lucene 버전 4.0에서 해결 될 것입니다. Solr과 함께 제공되는 Lucene 버전은 불행히도 오래된 무차별 대입 방식을 사용하고 있습니다.

은 https : //issues.apache.org/jira/browse/LUCENE-2089

HTTP는 :

을 //java.dzone.com/news/lucenes-fuzzyquery-100-times 그것을하는 경우 괜찮 으면, 나는 트렁크에서 Solr/Lucene을 다운로드하고 새로운 퍼지 쿼리가 어떻게 작동하는지 테스트 할 것을 제안합니다. 트렁크가 안정에도 불구하고

http://wiki.apache.org/solr/NightlyBuilds

는 생산 사용하지 않는 것이 좋습니다. 맞춤법 검사기

http://wiki.apache.org/solr/SpellCheckComponent

HTTP -

1 : //www.lucidimagination.com/blog/2010/08/31/getting-started-spell-checking- 나는 당신이 두 개의 유사한 방법을 제안 할 수 있습니다 with-apache-lucene-and-solr/

SpellChecker는 빠른 검색을 수행하기 위해 n-gram으로 작은 색인을 만듭니다. 또한 Levenshtein 거리를 사용하지만 모든 용어를 반복하는 대신 관련 용어의 거리 만 계산합니다.

"Califrna"에 대한 맞춤법 검사기를 먼저 실행해야하며 "Californa"라고 제안 할 것입니다. 그런 다음 퍼지 쿼리없이 주 색인에서 "캘리포니아"를 사용할 수 있습니다. //wiki.apache.org/solr/Suggester

당신은 SUGGESTER 구성 요소와 사용자 유형의 쿼리와 올바른 맞춤법을 제공 할 수 있습니다 :

2 자동

HTTP를 제언한다. 이것은 훨씬 더 빠를 것입니다. JaspellLookup 클래스로 퍼지 검색을 지원합니다. 퍼지 검색을 사용하려면 JaspellLookup을 업데이트해야합니다. 위키는 무엇을 업데이트해야하는지에 관해 많이 말하지 않습니다. usePrefix가 false로 설정되면 퍼지 조회를 수행해야합니다.

+1

n-gram도 언급하십시오. – aitchnyu

관련 문제