c# - ElasticSearch NEST OR查询

标签 c# elasticsearch nest

我在创建查询不同字段的查询时遇到了一些麻烦。
通过创建多个查询,我得到了想要的答案-但是出于性能的考虑,如果可能的话,我只想在一个查询中执行此操作。

我曾尝试在几个.Should子句中设置查询,但似乎它会搜索与每个字段都匹配的文档,我认为这是有意的。
看起来像这样;

 .From(0)
             .Sort(sort => sort
             .Field("priority", SortOrder.Descending))
             .Sort(sort => sort
             .Ascending(a => a.ItemNumber.Suffix("keyword")))
             .Sort(sort => sort
             .Descending(SortSpecialField.Score))
             .TrackScores(true)
             .Size(25)
             .Query(qe => qe
             .Bool(b => b
                .Should(m => m
                   .Match(ma => ma
                      .Boost(1.1)
                      .Field("itemnumber")
                      .Query(ItemNumber)
                     ))
                 .Should(m => m
                    .Match(ma => ma
                        .Boost(1.1)
                        .Field("itemnumber2")
                        .Query(ItemNumber)))
                 .Should(m => m
                    .Match(ma => ma
                        .Boost(1.1)
                        .Field("ean")
                        .Query(ItemNumber)))
                 .Should(m => m
                    .Match(ma => ma
                        .Boost(1.1)
                        .Field("itemalias")
                        .Query(ItemNumber)))
                        )));

我要的是搜索项目编号,查看文档是否匹配,如果不匹配,则搜索项目编号2,依此类推。
有没有一种有效的方法可以在一个查询中做到这一点?

最佳答案

我相信包含多个部分的should查询的语法应为查询数组。您只需要添加多个单独的应该查询的方式。您想要的应该看起来像这样:

.Bool(b => b
    .Should(
        m => m
        .Match(ma => ma
            .Boost(1.1)
            .Field("itemnumber")
            .Query(ItemNumber)),
        m => m
        .Match(ma => ma
            .Boost(1.1)
            .Field("itemnumber2")
            .Query(ItemNumber)),
            m => m
        .Match(ma => ma
            .Boost(1.1)
            .Field("ean")
            .Query(ItemNumber)),
            m => m
        .Match(ma => ma
            .Boost(1.1)
            .Field("itemalias")
            .Query(ItemNumber)))

更多here

关于c# - ElasticSearch NEST OR查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60392411/

相关文章:

c# - 从 Mysql 数据库填充 DataGrid

c# - 读NDS游戏头?

elasticsearch - ElasticSearch与ElasticSearch + Cassandra

elasticsearch - NEST 2.0 与 Elasticsearch for GeoDistance 始终返回所有记录

asp.net - NEST OptOut代码

c# - 匹配精确单词的正则表达式 - 搜索字符串突出显示

c# - 在 3 层架构中使用 DTO

elasticsearch - 在Elasticsearch 6.6和NEST 6.6中具有排序和分页变量的SearchTemplate

rest - 什么是在Logstash中提取Rest API的正确方法

elasticsearch - 查询ElasticSearch中格式错误的空子句错误