弹性搜索嵌套C#语法错误:在一个查询中使用通配符和多匹配

时间:2018-05-29 22:10:32

标签: c# elasticsearch nest

我有一个查询,我希望有两个子句:一个用于.MultiMatch,另一个用于.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。

赞赏任何和所有输入。

1 个答案:

答案 0 :(得分:1)

这取决于您在MultiMatchWildcard查询之间需要的布尔条件?

例如,我在这里寻找满足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*")
            )
        )
    )
));

如果您想要,请使用Should代替Must:请参阅Bool Query Usage