2017-04-19 54 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票,并且指向类似的问题。 –