2012-04-15 4 views
1

글쎄, 내 현재 애플 리케이션과 함께 작동하는 검색 플러그인을 얻으려고했지만 저를 괴롭히는 한 가지가 있습니다.Grails - 검색 가능한 플러그인 : Lucene 색인에만 의존하지 않도록 할 수 있습니까?

모든 검색은 전적으로 Lucene 색인에만 의존합니다.

그러면 문제가 생깁니다 (예 : http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html). 기본적으로 일대 다 관계는 검색 결과에 null 값을 갖습니다. 그것을 회피하기 위해서는 많은 수의 도메인을 만들어야합니다. , 내 데이터베이스의 절반이 Lucene 인덱스로 매핑된다는 것을 의미합니다.

현재 개발 환경에 있기 때문에 모든 것이 메모리에로드되고 Lucene은 Java에서 최소 40 % 이상의 메모리를 사용합니다 (총 1.2GB 사용됨). 가능한 한 많이 onlyexclude으로).

Lucene 색인에만 의존하지 않도록 할 수 있습니까? 색인에서 검색 만하고 색인에서 가져온 것만 반환하려면 아니오를 지정합니다. 또는 수동 HQL 쿼리를 작성하는 것보다 인덱스에 모든 것을 유지하는 것이 편리합니다 (따라서 검색 방법)?

답변

0

글쎄 대답은 다음과 같습니다. 예, 색인에 개체를 추가하지 않고 개체의 모든 정보를 검색 할 수 있습니다.

이 경우 플러그인을 구성해야합니다.

grails install-searchable-config 

그런 다음, 그것을 열 defaultMethodOptions를 찾아 truereload PARAM을 변경 : 먼저 구성 파일을 만듭니다. 이런 식으로 뭔가 :

defaultMethodOptions = [ 
    search: [reload: true, escape: false, offset: 0, max: 10, defaultOperator: "and"], 
    suggestQuery: [userFriendly: true] 
] 

지금 검색은 DB에서 개체를 다시로드하지만, 지금은 DB에 연결해야하기 때문에 설정 파일 상태와 같이 검색이 느려질 것입니다.

1

도메인 클래스 정의에서 component 키워드를 사용하는 방법에 대해 알아야 할 것 같습니다.

는 여기를 참조하십시오 : http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+concepts#Searchable Component

이 방법은 당신이 너무 많은 추가 클래스와 인덱스를 오염없이 도메인 모델에서 관련 정보를 포함 할 수 있습니다.

+0

구성 요소에 대해 읽었지만 설명서에 표시되면주의해야합니다. "[...] 검색 가능한 구성 요소의 데이터는 소유 객체의 검색 가능한 데이터 내에 저장됩니다." 그리고 Lucene 색인을 보면 이것이 사실임을 확인할 수 있습니다. 색인은 구성 요소의 데이터로 채워집니다. – GalmWing

+0

즉, 인덱스에는 추가 클래스가 없지만 _component_가있는 클래스는 데이터가 추가 되었기 때문에 커집니다. – GalmWing