1
如果查詢詞是「ABCD」,那麼在被標記化之後它是「A」「BC」「D」。我想提高術語「BC」,所以查詢詞是這樣的:solr:如何提升查詢詞在tokenizer之後
A BC^10 D" and phrase query "ABCD"
所有查詢詞的用戶輸入將像全自動,這樣重要的查詢詞將被增強處理。
我想我可以自定義一個新的Tokenizer來做到這一點,但我不知道它是否可行,或者是否有其他一些簡單的方法。
如果查詢詞是「ABCD」,那麼在被標記化之後它是「A」「BC」「D」。我想提高術語「BC」,所以查詢詞是這樣的:solr:如何提升查詢詞在tokenizer之後
A BC^10 D" and phrase query "ABCD"
所有查詢詞的用戶輸入將像全自動,這樣重要的查詢詞將被增強處理。
我想我可以自定義一個新的Tokenizer來做到這一點,但我不知道它是否可行,或者是否有其他一些簡單的方法。
您可以使用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);
}
使用QueryElevationComponent,如果查詢單詞匹配elevate.xml文件中的那些單詞,則將返回特定的docid。但我只是想提高這個術語。尋找使用正則表達式的特定術語將會很好,所以我需要定製一個Tokenizer或過濾器來改變字符串來提升特定的術語? – user1631977
不,在solr標記查詢之前需要指定boosting。您需要在客戶端代碼中將ABCD轉換爲'A + BC^10.0 + D'。生病編輯答案在C#中顯示一個例子 – Zasz