如何让搜索更自然?

时间:2017-04-19 20:12:53

标签: azure-search

包含NameDescription字段的文档。 Name体重增加Description

我想通过这样的得分订购文件:

  1. 完全匹配
  2. 部分匹配
  3. 模糊匹配
  4. 模糊部分匹配
  5. 接近条件得分更高。
  6. 我正在做这个手术以获得类似于我想要的东西:

    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); 
    

    而不是创建不稳定的搜索字符串?我错过了什么?

1 个答案:

答案 0 :(得分:0)

现在,如果您不想向用户公开查询语言,则可以重写用户查询以包含模糊和/或部分匹配。

我同意为您执行某些转换的可配置查询解析器会很好。有趣的是,我们的客户中没有多少人要求它。请创建UserVoice想法以帮助我们确定优先顺序。

可以使用Scoring Profiles定义字段(字段提升)的相对重要性。因此,如果要为“名称”字段赋予更高权重,则不必重写搜索查询。

请注意,通配符和前缀查询始终为整个文档分数提供常量分数,How full text search works in Azure Search文章的评分部分中有更多详细信息。