繁体   English   中英

ElasticSearch NEST OR 查询

[英]ElasticSearch NEST OR query

我在创建搜索不同字段的查询时遇到了一些麻烦。 我通过创建几个查询得到了我想要的答案——但为了性能——如果可能的话,我只想在一个查询中完成这个。

我试过在几个 .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)))
                        )));

我想要它做的是; 搜索 Itemnumber 并查看文档是否匹配,如果不匹配,则搜索 Itemnumber2 等等。 有没有一种有效的方法可以在一个查询中做到这一点?

您是否尝试过使用 MultiMatch 查询? https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html

这将允许您像使用 Match 查询一样搜索您的文档,但您应该能够指定多个字段进行搜索。这将允许您放弃 bool 查询。

我相信具有多个部分的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)))

更多在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM