我一直在使用NHibernate,NHibernate.Search和Lucene.Net來改進在我開發的網站上使用的搜索引擎。Manipulate在NHibernate的查詢結果上的得分/排名。搜索
基本上,我用它來搜索企業規範文檔的內容。這不會與Lucene的文檔概念相混淆:就我而言,規範文檔(我將在後面稱爲「specdoc」)可以包含很多頁面,這些頁面的內容實際上是索引的(因此,頁面本身就屬於Lucene的文檔概念)。所以,這些頁面屬於一個specdoc,而specdoc又屬於一個公司(所以,一個公司可以有很多specdocs)。我使用NHibernate.Search「IndexEmbedded」和「ContainedIn」屬性將頁面與它們的specdoc和specdocs關聯到它們的公司,所以我可以在specdoc頁面中查詢術語並使Lucene/NH.Search自己返回頁面,specdocs或符合頁面查詢的公司。我可以通過這種方式進行查詢並獲得排名結果,從而根據相關性呈現結果(即公司,specdoc或頁面),這非常棒。
但現在我需要更多。特別是在我查詢條款並且讓NH.Search返回匹配的公司時,我需要手動/人工調整某些結果的分數,因爲有些公司想要顯示在結果的頂部設置 - 想想「贊助的結果」。
我正在考慮在我的應用程序上這樣做,可能是創建一個包含與公司實體關聯的實體/數據庫表,並提高分數值。但我不知道如何將這些信息提供給Lucene,並在搜索時相應地提高搜索結果。最初,我想過要派生一個相似類來做到這一點,但它看起來並不像相似性可以用來在搜索時修改結果集。根據this page,它看起來像我需要的是混亂的重量或得分。但是文檔有點膚淺,因爲沒有關於如何實現自定義評分的示例,更不用說將它與NH.Search集成。
那麼,有沒有人知道如何做到這一點,或指向我的一些文件或工作示例如何做類似的事情?
謝謝!
是的,我想調整查詢以獲得我需要的結果,但我不能這樣做,至少我不知道如何。這裏的交易是:我的商店/索引,以及specdoc頁面的文本內容,specdocs和與內容相關的公司的ID。所以,如果我查詢這樣的內容: SpecDoc.Pages.content:white AND SpecDoc.CorpID:32 它返回的公司內容中包含「white」的specdoc頁面,僅限於ID爲32的公司。 – 2010-03-28 22:21:18
Now ,由此推斷,這將接近我需要的行爲: SpecDoc.Pages.content:white或SpecDoc。公司身份證號碼:64^100 - 但這顯然不是我所需要的:即使他們的網頁不包含「白色」,它也會帶來ID 64的公司的業績,並提升到100。 – 2010-03-28 22:25:10
我需要的是隻有當他們的頁面包含「白色」時,才能在CorpID上進行分數提升,否則它們不應該顯示在結果上。現在,無論我對Lucene查詢語法的理解是否缺乏(我的參考文獻已經是您發佈的頁面),或者我需要其他東西。我沒有時間仔細閱讀你的博客文章,所以稍後我會看看它,看看它是否有用。謝謝! – 2010-03-28 22:26:21