2010-03-25 4 views
0

에서 쿼리 결과의 점수/순위 조작 NHibernate, NHibernate.Search 및 Lucene.Net과 협력하여 개발 한 웹 사이트에서 사용되는 검색 엔진을 개선했습니다.NHibernate.Search

기본적으로 기업 명세서의 내용을 검색하는 데 사용합니다. 이것은 Lucene의 문서 개념과 혼동되어서는 안됩니다 : 제 경우에는 사양 문서 (이후 "specdoc"라고 함)에 많은 페이지가 포함될 수 있으며이 페이지의 내용은 실제로 색인이 생성됩니다 따라서 페이지 자체는 Lucene의 문서 개념에 해당하는 페이지입니다. 따라서 페이지는 specdoc에 속하며, 이는 회사에 속합니다 (따라서 회사는 많은 specdocs를 가질 수 있습니다). 저는 NHibernate.Search "IndexEmbedded"및 "ContainedIn"속성을 사용하여 페이지를 specdoc 및 specdocs와 연결하여 specdoc 페이지의 용어를 쿼리하고 Lucene/NH.Search가 페이지 자체를 반환하도록 할 수 있습니다 , specdocs 또는 페이지에서 쿼리와 일치하는 회사. 이 방법으로 쿼리하고 순위 결과를 얻을 수 있으므로 관련성별로 결과 (즉, 기업, specdocs 또는 페이지)를 표시 할 수 있습니다.

하지만 지금은 더 필요한 것이 있습니다. 특히 용어를 쿼리하고 NH.Search가 일치하는 기업을 반환하는 경우 결과의 일부에 점수를 표시하기를 원하는 기업이 있기 때문에 수동으로/인위적으로 일부 결과의 점수를 조정해야합니다. "스폰서 결과"를 생각해보십시오.

내 응용 프로그램에서이를 수행하려고합니다. 어쩌면 법인 엔티티에 대한 연결이 포함 된 엔티티/데이터베이스 테이블을 만들고 점수를 높이는 값을 생각할 것입니다. 그러나 이것을 Lucene에게주는 방법과 검색 결과에 따라 결과를 높이는 방법을 모르겠습니다. 처음에는이 작업을 수행하기 위해 Similarity 클래스를 파생시킬 생각 이었지만 유사성은 검색시 결과 집합을 수정하는 데 사용할 수있는 것처럼 보지 않습니다. this page에 따르면, 내가 필요한 것은 체중이나 득점으로 돌아 다니는 것입니다. 그러나 문서는 NH.Search와 통합하는 것은 물론 사용자 정의 채점을 구현하는 방법에 대한 예제가 없다는 점에서 조금 피상적입니다.

그래서 누구나이 작업을 수행하는 방법을 알고 있거나 유사한 문서 작업 또는 유사한 작업 수행 방법을 알려주십시오.

감사합니다.

답변

0

인덱스 시간 대신 쿼리 시간에 부스트를 설정할 수 있기를 바랍니다. 이것은 쉽게 할 수 있습니다. 쿼리를 작성할 때 부스트를 설정할 수 있습니다. Query 개체에는 전체 쿼리와 일치하는 문서를 향상시킬 수있는 SetBoost 속성이 포함되어 있습니다. 이것은 용어 쿼리를 두 개 사용하고 그 중 하나가 부스트되기를 원할 때 유용합니다. 그러나 QueryParser와 같은 것을 사용하여 쿼리를 작성하는 경우 쿼리 파서가 해당 용어에 대한 부스트를 설정하는 구문이 있습니다. 여기에 대한 자세한 내용은 http://lucene.apache.org/java/2_9_0/queryparsersyntax.html#Boosting%20a%20Term입니다. 이제 쿼리 파서를 사용하는 경우 일부 정규식을 사용하거나 쿼리 파서 문자열을 조정하여 추가 기호를 추가하여 용어를 향상 시키거나 자신의 쿼리 파서를 만들 수 있습니다.이 쿼리 파서는 결정할 때 부스트를 추가합니다. 추가되어야합니다. 왜냐하면 내 자신의 쿼리 파서를 만들었습니다. 그리 어렵지 않습니다. 여기에 대한 정보가 있습니다 http://openedu.ossreleasefeed.com/tutorials/apache-lucene-extending-the-queryparser/

+0

그래, 내가 원하는 결과를 얻기 위해 쿼리를 조정하는 방법에 대해 생각했지만 적어도 그렇게 할 수는 없었습니다. 여기 거래가 있습니다 : 나는 specdoc 페이지의 텍스트 콘텐츠, 콘텐츠와 관련된 specdocs 및 회사의 ID와 함께 저장/색인합니다. 그래서,이 같은 쿼리 경우 : SpecDoc.Pages.content : 흰색과 SpecDoc.CorpID을 32 가 specdoc 페이지 (32) –

+0

이제 ID로 회사에서 독점적으로, 내용에 "흰색"를 포함와 기업을 반환 , 그걸 외삽하면, 내가 필요한 행동에 가까워 질 것입니다 : SpecDoc.Pages.content : white or SpecDoc.CorpID : 64^100 -하지만 분명히 필요한 것은 아닙니다. 64 페이지의 ID 64를 사용하는 회사의 결과에 페이지가 "흰색"을 포함하지 않아도 100 점까지 올라갈 것입니다. –

+0

내가 필요한 것은 자신의 페이지에 "흰색"이 포함 된 경우에만 수행 할 CorpID를 높이는 점수입니다. 그렇지 않으면 결과에 전혀 나타나서는 안됩니다. 이제 Lucene 쿼리 구문에 대한 이해가 부족합니다 (내 참조는 이미 게시 한 페이지였습니다). 또는 다른 것이 필요합니다. 관심이있는 블로그 게시물을 읽을 시간이 없으므로 나중에 살펴보고 유용한 지 확인해 보겠습니다. 감사! –