2009-12-16 2 views
3

나는 Sitecore를 사용하고 있습니다. Lucene을 검색하고 싶습니다. 내가 가진 문제는 필드가 실제 값의 파이프로 구분 된 목록이고이 목록에 0과 무한 (이론적으로 말하면 실제로는 수천 또는 2 개의 가능성이 있음) 숫자 사이에있을 수 있다는 것입니다. 와일드 카드 쿼리를 성공적으로 사용할 수 없었으므로이 필드를 여러 필드로 나누는 방법을 상상할 수 없습니다. 목록에 알 수없는 항목이 있기 때문입니다.Lucene.Net Search List

+0

문제의 샘플을 제공해 주시겠습니까? 여러 개의 (많은) 값을 가질 수있는 필드가 있거나 그보다 더 복잡한 필드가 있습니까? – HakonB

+0

예를 들어, 검색하려는 필드에 다음 값이 들어 있습니다. {303FF303-E8A7-456B-8861-4D7B9CE92D88} | {F88DF50F-928B-41AC-9280-3964AEFA530E} | {B0A7516B-1C97-4134 -8E06-73433E3AE0B7} 그리고 내 응용 프로그램에서는이 필드에 {303FF303-E8A7-456B-8861-4D7B9CE92D88} 값을 가진 모든 문서를 가져와야합니다. – Kyle

답변

5

필자는 카테고리 계층 구조 내에서 검색하기 위해 유사한 기술을 검색에 사용했습니다. QueryParser 클래스에 힘든 작업을 남기고 다음과 같은 메서드를 사용하여 쿼리를 작성합니다. 일반적으로이 쿼리를 BooleanQuery에 추가합니다.

일반적으로 QueryParser는 훌륭한 작업을 수행하며 종종 Lucene 쿼리 대부분을 빌드하는 데 사용합니다. 특정 쿼리를 많이 만들 때보다 나을 것 같습니다!

당신이 할 수있는 또 다른 일은 QueryParser를 사용하여 빌드 한 다음 중단 점을 설정하고 쿼리 작성 방법을 살펴본 다음 코드를 특정 쿼리 유형으로 업데이트하는 것입니다.

private Query GetQuery(Sitecore.Data.ID id) 
{ 
    string categoryId = id.Guid.ToString(); //turn ID to string 
    StandardAnalyzer analyzer = new StandardAnalyzer(); //use standard analyzer 
    QueryParser parser = new QueryParser("categories", analyzer); //search inside category field 
    Query query = parser.Parse(categoryId); //get the query 
    return query; 
} 
+0

내 모든 필드에 대해 QueryParser를 사용하는 방법을 시도했지만이 쿼리를 사용하여 부울 쿼리에 두 개의 와일드 카드 쿼리를 추가하려고하면 쿼리가 너무 느려지는 것으로 판명되었습니다. 항상 QueryParser가 필기 쿼리보다 느린 경우입니까? – Gabbar