2012-05-10 3 views
0

복합 필드를 Lucene 쿼리에 적용하는 기능을 구현하는 데 문제가 있습니다.복합 필드를 lucene 쿼리로 확장하는 기능

대신 루씬 쿼리 입력하는 :

제목 : "올바른 방법"주제 :

모든 : "올바른 방법"

을 나는 사용자가 입력 할 수 있도록하려면는 " 올바른 방법 "

여기서는 모두 실제 필드 제목과 제목으로 구성된 합성 필드입니다. 이 함수는 합성 필드의 구성 요소가 확장 된 유효한 lucene 쿼리를 생성해야합니다.

문자열 쿼리 = applyCompositeFields (문자열 쿼리 스트링 compositeField 문자열 [] 서브) {

}가 제공된 쿼리 루씬 검색어 구문에 따라 임의의 질의 일 수있다 (참조 : http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/queryparsersyntax.html#Range%20Searches)를

들어 예 : 모든

:

,536,913,632 : [20020101 20030101 TO]는

는 확장해야 하는가 10

제목 : [20020101 TO 20030101] 제목 : [20020101 TO 20030101]

복잡한 쿼리 입력을 어지럽히 지 않고이 작업을 수행하는 방법에 대한 아이디어가 있으십니까?

Lucene 쿼리 개체 모델을 사용해 보았지만 쿼리 요소에 필드 이름을 설정할 수 없으므로 쓸모가 없습니다.

답변

0

나는 MultiFieldQueryParser이 당신이 찾고있는 것이라고 생각합니다.

편집

MultiFieldQueryParser는 것입니다 : 필드가 쿼리 문자열에서 명시하지 않은 경우

  • 은 ("The Right Way")
  • 가 하나의 필드 위에 일반 쿼리를 사용하여 여러 분야 사이에 쿼리를 파견 그렇지 않으면 (title:"The Right Way"). 예를 들어

,

MultiFieldQueryParser qp = new MultiFieldQueryParser(
      Version.LUCENE_36, new String[] { "subject", "body" }, 
      new KeywordAnalyzer()); 
    System.out.println(qp.parse("subject:\"hello\" body:test AND [1222 TO 2333]")); 

인쇄

subject:hello +body:test +(subject:[1222 TO 2333] body:[1222 TO 2333]) 

가상 복합 필드 all와 문법에 충실하려는 경우

, 당신은 때 필드 특별한 경우를 추가 할 QueryParser을 확장 할 수 이름은 all입니다. 소스 코드 MultiFieldQueryParser을 보면 영감을 얻을 수 있습니다.

+0

어떻게 그렇게됩니까? 내가 말할 수있는 것이 아닙니다. – user1387012

+0

쿼리에 비 복합 필드가 포함될 수도 있습니다.예 : all : [20020101 TO 20030101] 및 제목 : lucene – user1387012

+0

이 시나리오에서는 MultiFieldQueryParser가 작동하지 않습니다. 우리는 복합 필드, 그렇지 않은 필드를 가지고 있습니다. 쿼리 또한 복잡 할 수 있습니다. 같은 주제 : "hello"body : test AND all : [1222 to 2333] 등등. – user1387012

관련 문제