2016-03-18 60 views
-1

我有一個字段「描述」,我正在搜索一個文本對這個有默認相似性得分的文件。說,我已經搜索「你好男人」,我得到的結果像「你好芒果」,「你好男人你怎麼樣」,「你好man10」,「你好男人」,「你好曼」。所有這些都是預期的結果,但我想在部分匹配的頂部顯示完全匹配(這裏是「hello man」)。要獲得針對錯字的結果,我使用nGramFilterFactory進行索引和查詢,這是要求。唯一令我擔心的是完全匹配不在頂端。要從搜索結果(Apache Solr 5.5)非常頂部帶來精確匹配

請建議我們如何做到這一點或我需要什麼樣的方法。請幫忙。

回答

1

您應該在schema.xml中定義另一個字段,該字段不會對您的數據進行任何分析。你的情況要做到這一點最簡單的方法可能是執行以下操作:

<field name="exact_description" type="string" indexed="true" stored="false" multiValued="true" />

<copyField source="originalColumnName" dest="exact_description" docValues="true" />

使用string型將繼續從Solr的標記化或做其他事情你的數據。

然後,構建查詢時,你可以把類似下面的查詢的其餘部分之前:

exact_description:"hello man"^100.0

確保你把你所選擇的升壓(在^100.0)上exact_description,所以完全匹配將被強制到結果的頂部。

當您創建新的字段時,請確保您將其基於未對其執行任何分析的字段。舉例來說,在我的架構,我有一個叫exact_match場,這是從下面複製:

<field name="match" type="string" indexed="false" stored="true" required="false" omitNorms="true" />

現在,我可以只使用match在搜索精確的匹配,因爲match只是一個字符串,但規範的原因,我不得不創建exact_match這樣的:

<field name="exact_match" type="string" indexed="true" stored="false" multiValued="true" />

<copyField source="match" dest="exact_match" docValues="true" />

+0

對不起,不過我不能」噸解決這個:(我發佈我的架構作爲答案。請檢查並幫助我,我錯了 – Niranjan

+1

@Niranjan我給你添加了一些信息。我還建議你在這個問題上刪除你的答案並編輯你的問題以包含模式。這將有助於未來有同樣問題的其他人在問題中獲得所有相關信息。 – TMBT

+0

這一個工作。非常感謝。我也從答案部分刪除了我的模式... – Niranjan