首页 > 解决方案 > Elastic Search Nest C# 语法错误:在一个查询中使用通配符和多重匹配

问题描述

我有一个查询,我想要两个子句:一个 for.MultiMatch和一个 for .Wildcard。通配符独立于多重匹配。

我可以让他们两个单独工作,但不能一起工作。Visual Studio 中的当前错误消息带有Wildcard下划线的单词并说明以下内容:

Querycontainer does not contain a definition for 'Wildcard'...

这是我要实现的代码。我试过把.Wildcard.MultiMatch分开.Should,但无济于事。

.Query(q => q
  .Bool(b => b
    .Should(m => m                             
      .MultiMatch(ma => ma
        .Fields(f => f.Field("_id")
          .Field("elements.location.city")
          .Field("ticket_number")
          )
          .Query(query)
        )
        .Wildcard(c => c
          .Field("name").Value(query.ToLower() + "*")
        )
      )
    )
  )

您在第 8 行看到的query作为参数传递给此函数。

如上所述,第 10 行是当前的问题,因为 Query 容器不知道如何处理 Wildcard。

任何和所有输入表示赞赏。

标签: c#elasticsearchnest

解决方案


MultiMatch这取决于您在和Wildcard查询之间想要什么布尔条件?

例如在这里,我正在寻找同时满足MultiMatch AND WildCard查询的记录:

.Query(q => q
    .Bool(b => b
        .Must(m => m
            .MultiMatch(mm => mm
                .Fields(f => f.Field("FieldName"))
                .Query("MyKeyword")

            ), wc => wc
            .Wildcard(c => c
                .Field("FieldName")
                .Value("*Something*")
            )
        )
    )
));

如果您想对它们进行OR,请使用Should代替Must:请参阅Bool Query Usage


推荐阅读