2014-03-28 3 views
0

정수 배열을 가지고 있으며 특정 필드 값이이 배열에 속하는 Lucene 인덱스를 검색해야합니다.Lucene - 배열에 정수 필드가 포함되어 있는지 검색

지금은 그냥 (그냥 생각, 아직 테스트하지)이 같은 뭔가를 생각하고 있어요 :

var arrayWithIds = int[] {501,828,2837,928,2882....}; 

var booleanQuery = new BooleanQuery(); 
foreach(var id in arrayWithIds) 
{ 
    var subQuery = new TermQuery(new Term("Id",NumericUtils.IntToPrefixCoded(id))); 
    booleanQuery.Add(subQuery, BooleanClause.Occur.SHOULD); 
} 

을 ... 나는 다른 어떤 방법이 있나요

를 검색 할 booleanQuery를 사용 ?

Lucene.net 2.9를 사용하고 있습니다. 다른 종속성으로 인해 최신 버전으로 업그레이드 할 수 없습니다.

+0

이미 가지고있는 코드에 어떤 문제가 있습니까? 당신이 아직 그것을하지 못했다는 것을 알고 있지만, 실제 코드를 작성하고 그것이 당신의 필요에 부합하는지 확인해야합니다. 우리가 한 일에 관해 질문 할 때 우리에게 오십시오. – gunr2171

+0

# gunr2171보다 효율적인 방법이 있는지 궁금합니다. 내가 Lucene 검색 엔진에 대해 많이 알지는 않습니다. 검색해야 할 값의 배열을 전달하는 더 직접적인 방법이 있는지 궁금합니다. – Vazgun

답변

0

대신 숫자 ID 필드를 문자열 필드로 변경해야합니다. 실제로는 숫자 필드를 나타내는 것이 아니라 숫자 일 뿐인 식별자입니다. 그래도 추측. 나는 IntToPrefixCoded을 사용하는 것을 좋아하지 않는다. Lucene이 내부적으로 만 사용하도록 의도 되었기 때문이다. (Lucene.Net이 Lucene 4.0에 도달하면, NumericUtils에 의미가 있고 역방향이 아닌 변경이 있었다. 번역).

그러나 쿼리를 작성하는 방식은 훌륭합니다. id:(501 828 2837 928 2882)과 같은 쿼리를 전달하면 QueryParser가 동일한 결과를 생성합니다.

+0

#femto 감사합니다. 예, Id가 문자열 값이기 때문에 인덱스를 변경해야한다는 느낌이 들었습니다. – Vazgun