2017-04-19 41 views
2

擁有NameDescription字段的文檔。 Name有更多的重量Description如何讓搜索更自然?

我想通過分數這樣的命令文件:

  1. 精確匹配
  2. 部分匹配
  3. 模糊匹配
  4. 模糊部分匹配
  5. 鄰近字詞得分較高。

我做這個手術來得到類似我想要的東西:

public Task<DocumentSearchResult<T>> SearchWithFuzzyAsync<T>(string searchTerm, SearchParameters sp) where T: class 
{ 
sp.SearchMode = SearchMode.All; 
sp.QueryType = QueryType.Full; 
searchTerm = Sanitize(searchTerm).Trim(); 
var keywordTrimmedFuzzy = searchTerm.Replace(" ", "~ "); 
if (string.IsNullOrWhiteSpace(searchTerm)) 
{ 
    return Task.FromResult(new DocumentSearchResult<T>()); 
} 
var searchTerms = $"({searchTerm}) 
     || ({keywordTrimmedFuzzy}~) 
     || ({keywordTrimmedFuzzy}*)^0.8"; 
return indexClient.Documents.SearchAsync<T>(searchTerms, sp); 

我缺少的東西,或者我應該建立這種類型的事情得到一些像樣的成績?

我用這種方法看到的問題是,我不能讓我的用戶使用搜索引擎來它的全範圍(就像使用選項 - 或高級語法),除非我管理我的代碼。

,那豈不是更容易,如果你可以這樣做:

sp.UseFuzzySearch = true; 
sp.UsePartialMatch = true; 
sp.ProximityTreshold = 4; 
indexClient.Documents.SearchAsync<T>(term, sp); 

,而不是創建搖晃的搜索字符串?我錯過了什麼?

回答

0

眼下,改寫用戶的查詢,包括模糊和/或部分匹配的是你能做的最好的,如果你不希望暴露的查詢語言給用戶。

我同意,那進行一些變換你的配置查詢分析器將是很好。有趣的是,我們很多客戶都沒有要求。請創建一個UserVoice的想法來幫助我們優先考慮。 (場增強)字段

相對重要性可以與Scoring Profiles來定義。因此,如果您想爲「名稱」字段賦予更高的權重,則不必重寫搜索查詢。

請注意,通配符和前綴查詢總是會爲總體文檔分數貢獻不變的分數,有關How full text search works in Azure Search文章的評分部分的更​​多詳細信息。

+0

我正在使用得分情景模式(忘記提及)。不清楚你的注意事項是,如果在這裏使用的'^ 0.8'({keywordTrimmedFuzzy} *)^ 0.8'正在影響結果。 –

+0

我發現很難想象除了一些簡單的測試沒有請求這個功能之外,有人使用天藍色搜索。沒有它,如果我有一個標題'巴特'和搜索'酒吧'或'巴特*'不會返回該項目。我不明白爲什麼最後一個是通過設計而不是bug。 –

+0

https://feedback.azure.com/forums/263029-azure-search/suggestions/11112582-support-prefix-matching-for-suggestions是全球有機紡織品標準13票,並且指向類似的問題。 –

相關問題