2012-12-13 2 views
4

FieldQuery 개체를 사용하여 Sitecore.Ecommerce.Search.Query를 만들고 있습니다. LuceneQueryBuilder 클래스를 사용하여 Sitecore 쿼리를 Lucene.Net.Search.Query로 변환합니다. 쿼리와 함께 모든 것은 빈 문자열에 일치시키려는 필드를 제외하고는 잘 작동합니다.Sitecore + Lucene 검색 FieldQuery with 빈 문자열

그래서 ...이 작동합니다

new FieldQuery(FieldName, "1", MatchVariant.NotEquals)

을하지만 그렇지 않은 :

new FieldQuery(FieldName, string.Empty, MatchVariant.NotEquals)

나는 Sitecore.Ecommerce 어셈블리 및 Lucene.Net 어셈블리 모두를 반영했다 뿐만 아니라 어떤 명백한 문제도 발견하지 못했습니다. 내가 만든과 루씬 쿼리에서 사용되는 용어 볼 때, 그것은 다음과 같습니다

-FieldName : 나는 믿고

가 올바르지 않습니다 ...하지만 어쩌면 난 그냥 정확하고 올바른 필드 인덱스를 설정하지 않았습니다 ... 나는 솔직하게 확신하지 못합니다.

도움을 주시면 대단히 감사하겠습니다.

감사합니다.

답변

6

Lucene은 실제로 null/empty 값 검색을 지원하지 않습니다. 결국 색인을 생성 할 수있는 색인이 없습니다. Lucene은 inverted index을 사용합니다.이 쿼리는 순수 부정 쿼리와 null 검색을 포함하여 특정 종류의 쿼리를 어렵게 또는 불가능하게 만듭니다.

특정 필드가 null 인 문서를 검색해야하는 경우 검색 할 수있는 필드에 기본값 (예 : "NULL")을 저장해야합니다. 말했다

, 당신은 개방 상부 및 하부 경계와 범위 질의를 구성

new RangeQuery(FieldName, null, null, true, true); 

를 만들 수 있습니다, 그래서 값이있는 모든 항목과 일치합니다.

좋은 방법은 아니지만 부정적인 방법으로 만 쿼리하는 것은 아닙니다.

+0

감사합니다. 내 기본 값을 null 또는 빈 문자열 이외의 값으로 설정하여 나머지 Sitecore FieldQuery 인프라를 응용 프로그램과 같이 사용할 수 있도록 결정했습니다. 귀하의 도움을 주시면 감사하겠습니다! – MarcusTheShogun