2012-11-21 1 views
3

분석기 기본 필드에 abcdef 값을 포함하고 두 개의 다른 문서에 속하는 색인이 있습니다. 쿼리 abc OR def을 실행하면 색인에있는 두 문서의 조회수가 모두 발생합니다. 하지만 abc OR d?f을 사용할 때 abc이 포함 된 문서에 대해서만 조회수가 발생합니다. d?f으로 색인을 쿼리 할 때 def이 포함 된 문서에 대한 조회수가 발생합니다.왜 lucene single char 와일드 카드 질의는 와일드 카드를 완전히 지정할 때보 다 적은 수의 문서를 찾는가?

abc OR d?f에 대해 구문 분석 된 쿼리를 볼 때 올바른 결과가 표시됩니다. 이는 BooleanQuery이 구문 분석되어 두 번째 절인 WildcardQuery을 의미합니다.

내가 잘못 했나요?

내 응용 프로그램에는 위에서 지정한 부울 절도 있습니다. 이것은 위에서 지정한 것과 다른 필드와 일치합니다. 제 경우의 전체 쿼리는 user:john AND (abc OR d?f)입니다. 하지만 내 색인의 모든 문서에는 user 필드에 john이 포함되어 있습니다. 그래서 그게 문제가되어서는 안됩니다.

저는 lucene 3.0.3을 사용하고 있습니다.

편집 :
나는 luke를 사용하여 인덱스를 살펴했다. 재 작성된 쿼리에서 d?f이라는 단어가 ()으로 바뀌 었음을 알았습니다. 쿼리가 abc 만 일치한다는 것은 분명합니다. 그러나 쿼리를 다시 작성할 때 와일드 카드 용어가 대체되는 이유는 무엇입니까?

+0

필자는 Lucene에 익숙하지 않다는 것을 인정해야하지만, 설명서를 아주 자세히 보면 사용법이 올바른지 확인하는 것 같습니다. 내 생각에 무언가가 두 번째 쿼리를 정규 표현식으로 해석하여 'def'를 찾지 못하게 할 것이지만, 내가 말했듯이 나는 Lucene에 대해서 충분히 알지 못한다. 내가 너에게 유용하다고 생각한 것은 단지 생각 일 뿐이다. – Thor84no

+0

귀하의 설명에서 모든 모양이 올바른 것 같습니다. 이 문제를 해결하는 유일한 방법은 유스 케이스를이 독립 실행 형 클래스에 추출하여이 문제를 설명하는 것입니다. – mindas

+0

몇 가지 코드를 게시 할 수 있습니까? – maxbeaudoin

답변

0

이것은 내 잘못이었습니다. 테스트 시나리오에서 사용 된 데이터는 좀 더 복잡합니다. 따라서 abc이라는 용어가 색인에 여러 번 나타났습니다. 하지만 색인에서 10 점을 얻었습니다. 쿼리가 abc와 일치하기 때문에 d?f이 가장 높은 점수를 얻은 후 그 결과가 가장 먼저 나타납니다. 따라서 def이 포함 된 문서를 쿼리에서 찾을 수 없습니다.