2012-09-29 63 views
1

如果查詢詞是「ABCD」,那麼在被標記化之後它是「A」「BC」「D」。我想提高術語「BC」,所以查詢詞是這樣的:solr:如何提升查詢詞在tokenizer之後

A BC^10 D" and phrase query "ABCD"

所有查詢詞的用戶輸入將像全自動,這樣重要的查詢詞將被增強處理。

我想我可以自定義一個新的Tokenizer來做到這一點,但我不知道它是否可行,或者是否有其他一些簡單的方法。

回答

0

您可以使用QueryElevationComponent來做到這一點。如果你在你的elevate.xml文件中加入BC這樣的詞,那麼這些詞將在查詢時自動提升。如果您已經將組件添加到您的請求處理程序當然。

編輯:

我認爲你的意思提升方面,而不是文件任期。 我認爲你的情況,如果你使用正則表達式和白名單查找特定的術語,並且在發送到solr之前更改字符串以包含增強,它可能會起作用。

[Fact] 
    public void Boost() 
    { 
     var query = "ABCD"; 
     var importantTerms = new List<string>{ "BC"}; 
     importantTerms.ForEach(term => query = query.Replace(term, string.Format("+{0}^10+", term))); 
     Assert.Equal("A+BC^10+D", query); 
    } 
+0

使用QueryElevationComponent,如果查詢單詞匹配elevate.xml文件中的那些單詞,則將返回特定的docid。但我只是想提高這個術語。尋找使用正則表達式的特定術語將會很好,所以我需要定製一個Tokenizer或過濾器來改變字符串來提升特定的術語? – user1631977

+0

不,在solr標記查詢之前需要指定boosting。您需要在客戶端代碼中將ABCD轉換爲'A + BC^10.0 + D'。生病編輯答案在C#中顯示一個例子 – Zasz