首页 > 解决方案 > C#弹性搜索精确文本匹配与嵌套

问题描述

我正在使用最新的 c# 弹性搜索 NEST 库。我正在尝试使用精确的文本匹配进行搜索,但目前它正在搜索子集匹配。我想做完全匹配。以下是我的代码片段:


public User GetUserByUsername(string username)
    {
        var client = new ElasticConnectionManager(this.configuration).GetClient(Constant.IndexUsers);

        var searchResponse = client.Search<User>(s => s                
            .Query(q => q
            .Bool(bq => bq                
            .Filter(f => f.Term(t => t.Username, username))
            .Must(mt=>mt.Term(t2=> t2.Username, username)))));

        //.Must(bs => bs.Term(t => t.Username, username))
        if (searchResponse.Documents.Count > 0)
            return searchResponse.Documents.First();
        else
            return null;
    }
}

标签: c#elasticsearchnest

解决方案


尝试使用 match_phrase 查询进行精确的文本匹配。您的查询应类似于以下内容:

    var searchResponse = client.Search<User>(s => s
            .Query(q => q
            .MatchPhrase(m => m
            .Field(f => f.Username)
            .Query(username))));

推荐阅读