2009-06-23 2 views
2

.net을 사용하는 구직 포털에 Lucene을 사용하고 있습니다. 다음 사용 사례에서 성능 관련 문제가 있습니다. 사례 검색 : 구직을 할 때 사용자가 직업 위치 (예 : Atlanta, GA)를 선택하고 방사형 거리 (예 : 50 마일)를 선택할 수 있습니다. Lucene에서 구직 검색 결과를 반환하는 데 필요한 시간이 상당히 길었습니다.Lucene을 사용하여 위치 기반 검색 성능 향상

FYI는 미국 및 캐나다 기반의 도시, 주, 경도 및 위도를 저장하는 SQL Server 2005 데이터베이스를 유지 관리하고 있습니다 (총 약 1 백만 개의 레코드 포함).

어쨌든 내가이 위치 기반 구직 검색의 실적을 향상시킬 수 있습니까?

+0

데이터베이스와 관련하여 Lucene을 사용하여 위치 기반 검색을 정확하게 수행하는 방법에 대해 자세히 설명 할 수 있습니까? 예를 들어 사용자가 "Atlanta, GA"를 검색하면 Lucene은 50 마일 이내에있는 도시를 어떻게 알 수 있습니까? 먼저 데이터베이스에 쿼리해야합니까? –

+0

ur comments 주셔서 감사합니다. 우리는 입력으로 위치를 소요 특정 반경 내에서 가장 가까운 도시를 반환합니다. NET 기반 거리 API가 있습니다.이 컬렉션은 다음 작업을 검색 Lucene에 주어집니다. – user74042

+0

Lucene 색인에서 "Atlanta, GA"문자열을 검색하고 있습니까? 너는 무엇을 색인하고 있니? "Atlanta, GA"를 하나의 용어로 색인화합니까 아니면 토큰으로 분할합니까? – Gandalf

답변

3

기본적으로 검색 매개 변수에는 텍스트와 공간이라는 두 가지 유형이 있습니다. 아마도 하나의 유형을 사용하여 다른 유형의 결과를 필터링 할 수 있습니다. 예를 들어 애틀란타 애틀란타 근처 .NET 개발자 작업을 찾고있는 사람은 입니다. 먼저 모든 .NET 개발자 작업을 검색하고 위치를 필터링하여 또는 애틀란타 주변의 모든 작업을 검색하고 .NET 개발자 용 필터를 검색 할 수 있습니다. 나는 처음이 더 빠를 것이라고 믿는다. 작업 위치를 Lucene에 직접 저장하고 검색에 통합 할 수도 있습니다. 대략적인 초안은 인덱싱 : 입니다. 1. 새로운 '원하는'광고를 받으면 데이터베이스를 사용하여 해당 위치 정보를 찾으십시오. 2. 위치를 Lucene 필드로 광고 문서에 저장하십시오. 검색 : 1. 텍스트 일치에 따라 모든 작업을 검색하십시오. 2. 기하학적 계산을 사용하여 사용자 위치와 작업 위치 간의 거리를 찾습니다. 3. 거리에 따라 작업을 필터링하십시오.

Lucene in Action은 정신적으로 유사한 공간 검색의 예를 갖는다. A second edition이 (가) 작성 중입니다. 또한 Sujit Pal's suggestions for spatial search with LucenePatrick O'Leary's framework을 확인하십시오. LocalluceneLocalSolr도 있지만, 얼마나 성숙한 지 모르겠습니다.

0

내 인덱스의 크기는 가장 가까운 도시에 대한 쿼리를 구축하기위한 다음 코드를 사용하여 약 4 MB.Am입니다 :

foreach (string city in htNearestCities.Keys) 
       { 
        cityStateQuery = new BooleanQuery(); 
        queryCity = queryParserCity.Parse("\"" + city + "\""); 
        queryState = queryParserState.Parse("\"" + ((string[])htNearestCities[city])[1] + "\""); 
        cityStateQuery.Add(queryCity, BooleanClause.Occur.MUST); 
        cityStateQuery.Add(queryState, BooleanClause.Occur.MUST); 

        findLocationQuery.Add(cityStateQuery, BooleanClause.Occur.SHOULD); 
        } 
+0

4MB? Lucene은 그러한 작은 데이터 세트에 대해 약간 과잉입니다. – Gandalf

+0

우리는 Lucene에서 수백만 건의 레코드를 줄줄이 예측하고 있습니다 ... – user74042

0

당신은 궁극적으로 루씬 색인 tiles에 의해 공간 검색을 처리하도록 할 수 있습니다. 그러나 당신이 lucene 쿼리가 느리다는 것이 확실하다면, 도시를 찾는 것이 아니라, 국가와 도시를 함께 인덱싱하는 것으로 시작하십시오. 관계형 데이터베이스에서 여러 열을 인덱싱하는 것과 비슷합니다. '주 : 도시'필드에는 'GA : Atlanta'와 같은 값이 있습니다. 그런 다음 교차가 질의시 수행되지 않습니다.