2012-09-09 6 views
2

개인 프로젝트에서 Lucene.Net을 사용하고 있으며 케이스를 처리해야하지만 lucene이 동일한 유형의 쿼리를 사용하여 두 경우를 처리하는 좋은 방법을 찾을 수 없습니다.필터가있는 Lucene 빈 쿼리 문자열

기본 쿼리는 StandardAnalyzer 및 NumericRangedFilter와 함께 MultiFieldQueryParser를 사용하여 날짜별로 필터링합니다 (날짜는 긴 값으로 저장 됨).

두 개의 다른 쿼리 구문 분석기 (빈 검색 문자열과 사용자가 검색 문자열을 입력하는 데 사용하지 않아도 됨)를 사용하지 않고 필터가 빈 검색 문자열을 처리하기를 원합니다. 현재, 빈 문자열이 사용될 때 MultiFieldQueryParser는 ParseException을 던집니다.

이 문제를 해결하는 가장 좋은 방법에 대한 조언이 있으십니까? 또는 Lucene 또는 Lucene.Net의 결함 (의도적 또는 기타)입니다.

결과

내가 쿼리 문자열 그렇지 않으면 정상적인 쿼리 비어있는 경우 MatchAllDocsQuery를 사용하여 끝났다.

또한 NumericFields 및 NumericRangeFilter의 사용을 제거해야했지만 쿼리를 사용할 때 결과가 반환되지 않았습니다. 나는 문자열과 정상적인 RangeFilter를 사용하여 옛날 방식으로 날짜 범위를 필터링하는 것을 끝내었다.

답변

4

처리하는 가장 좋은 방법은 MatchAllDocsQuery을 생성하고 입력이 빈 문자열 인 경우 파서를 무시하는 것입니다.

http://lucene.apache.org/core/old_versioned_docs/versions/2_9_4/api/all/org/apache/lucene/search/MatchAllDocsQuery.html

+0

안녕하세요. http://stackoverflow.com/questions/16906689/filter-not-working-with-text-values-lucene-3-0-3으로 나를 도와주세요. 그것 이상 미쳐. 아무도 Lucene 게시물에 답장을하지 않습니다. – Huzaifa