2014-04-08 1 views
0

"GuidId"필드와 "guidid"필드로 색인 된 문서가 있습니다. 어떻게하면 lucene net이 대소 문자를 무시하도록 할 수 있습니까? 그래서 다음 질의가 대소 문자에 관계없이 검색을 수행합니까?lucene.net이 쿼리 필드의 대소 문자를 무시하도록 할 수 있습니까?

TermQuery termQuery = new TermQuery(new Term("GuidId", guidId.ToString())); 

"guidid"필드가있는 문서에 대해 다른 쿼리를 쓰고 싶지 않습니다. 소문자

답변

1

이상하게도, 펑키 케이스가있는 필드 이름을 사용하지 마십시오. 동적으로 필드 이름을 정의하는 경우 필드 이름을 소문자로 만들어 색인에 추가해야합니다. 그렇게하면 쿼리 필드의 이름을 소문자로 유지하는 것이 쉬워 져야하며 올바른 모양을 유지해야합니다.

어떤 이유에서든이 대소 문자를 구분하는 데이터가 붙어있는 경우 쿼리를 확장하여 필드 이름의 알려진 모든 순열을 검색하여 모든 결과를 얻을 수 있습니다. 같은 뭔가 : 그것은 단지 사이에 충돌 최대 점수가 아니라 여러 히트 곡에서 가능한 합성 점수보다, 질의 모음입니다 반환 이후

Query finalQuery = new DisjunctionMaxQuery(0) 
finalQuery.add(new TermQuery(new Term("GuidId", guidId.ToString()))); 
finalQuery.add(new TermQuery(new Term("guidid", guidId.ToString()))); 

DisjunctionMaxQuery 아마, 여기에 좋은 선택이 될 것입니다.

MultiFieldQueryParser과 유사한 효과를 사용할 수도 있습니다. 나는 그것이 DisjunctionMax를 사용한다고는 생각하지 않지만,이 경우 큰 거래 일 것 같지 않습니다.