【问题标题】:Match phrase query with multiple fields in elasticsearch using nest使用嵌套将短语查询与弹性搜索中的多个字段匹配
【发布时间】:2016-04-10 05:15:41
【问题描述】:

我正在尝试使用匹配短语进行查询,但在多个字段上进行查询,但我的嵌套允许我只在一个字段上进行查询,这是我的代码 sn-p

    var result = client.Search<document>(s => s
    .Analyzer("automplete")
    .Query(p => p
    .MatchPhrase(M => M
    .OnField("description")
    .Query(value))));

我在课程文档中有多个字段,我也想搜索这些字段。

请帮我解决这个问题 - 在此先感谢!

【问题讨论】:

    标签: elasticsearch nest match-phrase


    【解决方案1】:

    match_phrase 甚至不支持多个字段。要对多个字段使用match 查询,您需要使用multi_match 查询。

    var result = client.Search<document>(s => s
        .Analyzer("automplete")
        .Query(p => p
            .MultiMatch(m => m
                .OnFields(new[] { "description" /*, add other fields here */ })
                .Query(value)
                .Type(TextQueryType.Phrase))));
    

    【讨论】:

    • @bittusarkar:感谢您的回答。它对我帮助很大。还有一个问题。我怎样才能像我们做string result = string.empty一样事先初始化var result。我可以为弹性搜索做同样的事情吗? TIA :)
    • @ASN 我不明白你的问题。无论如何,你想做什么?您始终可以使用null 对其进行初始化。
    • 我怎样才能像我们 string result = string.empty 一样事先初始化 var 响应。我可以为弹性搜索做同样的事情吗?通常我们使用var response= client.search&lt;className&gt;(//some code here); 而不是我想先初始化response 然后在后面的代码中使用参数。我希望你现在明白,否则如果你能分享你的邮件 ID,我可以给你发邮件。
    • 我想写一个if else条件,它接受两个不同的查询,但是得到响应后对结果的处理是一样的。所以想在 if-else 循环之前初始化它。我尝试使用 null 对其进行初始化,但它引发了错误,因为我们在初始化后将其与搜索响应等同起来。所以我使用var response = (ISearchResponse&lt;className&gt;)null;进行初始化。这达到了目的。谢谢。你的回答给了我一个想法。 :)
    • 哦,在这种情况下不要使用var。一个简单的ISearchResponse&lt;className&gt; response = null; 就足够了:)
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多