2012-01-23 3 views
1

다양한 텍스트 기반 필드에서 검색해야하는 응용 프로그램이 있습니다. 응용 프로그램은 NHibernate를 ORM으로 사용하여 개발됩니다.데이터베이스의 텍스트 기반 검색을위한 모범 사례

키워드가 유사한 단어와 일치하는 경우에도 관련 결과를 반환 할 수 있도록 Porter Stemming을 검색에 구현하고 싶습니다. 예를 들어 제품 설명에 memories이 포함되어 있고 검색 키워드는 memory입니다.

누구나 이러한 검색 유형에 대한 우수 사례를 제안 할 수 있습니까? 마음에 오는 첫 번째 아이디어는 예를 들어, 데이터베이스 같은 분야의 두 가지 버전을 저장하는 경우 : Description 열은 웹 사이트 관리자가 입력 한 텍스트가 될 것이다

Description 
Description_Search 

과의 텍스트 볼 수 있습니다 프론트 엔드.

Description_Search은 동일한 텍스트를 포함하지만 Porter-Stemming 알고리즘을 통과합니다. 검색 쿼리는 Description 대신 Description_Search 필드를 기반으로합니다.

의미가 있습니까? 거의 동일한 텍스트의 두 버전을 저장해야하는 공간 낭비입니까?

또한이 경우 Lucene.Net이 도움이 될까요? 나는 전체 텍스트 기반 검색을 위해 Lucene.Net을 통합하는 방법을 찾고 있지만 아직 자세히 조사하지는 않았다.

미리 감사드립니다.

+1

일부 RDBMS 제품은 많은 추가 작업을 수행하지 않고도 검색을 용이하게하는 기능을 제공합니다. SQL Server의 전체 텍스트 검색이 떠오르지 만 다른 것들이 있습니다.성능이 크게 향상되면 데이터를 복제하는 데 낭비가되지 않습니다. 사실 이것은 색인 생성과 동일합니다. – Yuck

+0

Lucene을 사용하면 간단합니다. http://stackoverflow.com/a/5394769/54937 –

+0

http://www.d80.co.uk/post/2011/03/04/Nhibernate-Search-Tutorial-with-LuceneNet - and - NHibernate-30.aspx http://ayende.com/blog/3992/nhibernate-search –

답변

0

2 개의 입력란을 사용할 필요는 없습니다. 필드에는 두 개의 "값"이 있으며 하나는 Document.Get(...)을 사용하여 검색 할 수 있으며 하나는 검색에 사용됩니다. 기술적으로 값을 저장하지 않아도되는 일반적인 해결책은 데이터베이스의 원래 내용을 조회하는 데 사용되는 ID를 저장하는 것입니다. 또한 작성자 정보 및 문서 위치와 같은 더 많은 정보를 조회 할 수 있습니다.

Lucene.Net은이 경우 도움이되지만 인프라를 직접 작성해야합니다. 분석기 구성 (일반적으로 구성 할 필요 없음)을 처리하고 콘텐츠를 색인화해야합니다. 주석에서 언급했듯이 SQL Server의 전체 텍스트 검색 기능을 사용할 수는 있지만 그 자체에는 몇 가지 제한 사항이 있습니다 (사용자에게 영향을주지 않을 수 있음).

하나의 큰 문제는 SQL Server의 FTS를 사용했지만 Lucene.Net에서 작동합니다. Lucene.Net에서 Lucene.Net의 거의 모든 것을 할 수 있기 때문에 Lucene.Net에서 작동합니다. 감광도. 스웨덴어 규칙을 사용하여 구성 할 수 없었습니다. åäö을 실제 문자로 처리해야합니다. 악센트 감도를 활성화하면 이렇게되지만 분음 기호는 ñn과 다른 의미 인 실제 문자로 구문 분석된다는 것을 의미합니다. ("jalapeno"를 검색하고 "jalapeño"와 일치하는 항목이 없다고 상상해보십시오.) 악센트 감도를 비활성화하면 기본적으로 모든 발음 구별 기호가 제거되고 åäöaao으로 바뀌며 단어가 완전히 다른 것으로 변합니다.

Lucene.Net (SQL Server FTS와 비교 됨)에 글을 쓰면 결과 강조 표시 (쿼리와 일치하는 문서에 어떤 문구가 표시되는지), 유사한 문서 검색, 맞춤법 검사, 사용자 지정 결과 증폭, 패싯 , 그리고 사용자의 검색 경험을 향상시키는 다른 것들을 포함합니다.

+0

이 글이 게시 된 이후로 나는 Lucene.Net을 꽤 오랫동안 사용 해왔다. - 완벽하게 사용자 정의 할 수 있습니다. 이 게시물은 모든 것을 요약하므로 답변입니다. –