분석기 기본 필드에 abc
및 def
값을 포함하고 두 개의 다른 문서에 속하는 색인이 있습니다. 쿼리 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
만 일치한다는 것은 분명합니다. 그러나 쿼리를 다시 작성할 때 와일드 카드 용어가 대체되는 이유는 무엇입니까?
필자는 Lucene에 익숙하지 않다는 것을 인정해야하지만, 설명서를 아주 자세히 보면 사용법이 올바른지 확인하는 것 같습니다. 내 생각에 무언가가 두 번째 쿼리를 정규 표현식으로 해석하여 'def'를 찾지 못하게 할 것이지만, 내가 말했듯이 나는 Lucene에 대해서 충분히 알지 못한다. 내가 너에게 유용하다고 생각한 것은 단지 생각 일 뿐이다. – Thor84no
귀하의 설명에서 모든 모양이 올바른 것 같습니다. 이 문제를 해결하는 유일한 방법은 유스 케이스를이 독립 실행 형 클래스에 추출하여이 문제를 설명하는 것입니다. – mindas
몇 가지 코드를 게시 할 수 있습니까? – maxbeaudoin