如何为弹性搜索匹配和模糊查询(NEST)编写LINQ表达式

时间:2016-04-22 10:00:30

标签: c# linq elasticsearch lambda nest

您有一个查询,我必须使用模糊操作进行匹配。

{
  "query": {
    "match": {
      "answer": {
        "query": "conevrt o",
        "fuzziness": 2
      }
    }
  }
}

当我尝试使用Lambda表达式写这个时,我得到一个错误,说无法将int转换为NEST.fuzziness。

这是我对lambda表达的看法。

 match = drFuzzy.Text; //im getting text from the asp:dropdown(hardcoded 0,0.5,1,2)
  int fuzz = Int32.Parse(match); // converting this to integer


var searchResponse = client.Search<StudResponse>(s => s
                    .Query(q => q
                    .Match(m => m
                    .Field(f => f.Answer)
                    .Query(key1)
                    .Fuzziness(fuzz) //throwing an error here. cannot convert from int to Nest.Fuzziness
                   )
                )
            );

提前致谢。

1 个答案:

答案 0 :(得分:3)

要传递fuzinness参数,您必须使用Fuzziness类和EditDistance方法。 NEST文档有一个非常好的match query usage示例,请查看。

这是您在用例中使用Fuzziness.EditDistance(..)代码的方法。

client.Search<StudResponse>(s => s
    .Query(q => q
        .Match(m => m
            .Field(f => f.Answer)
            .Query(key1)
            .Fuzziness(Fuzziness.EditDistance(fuzz))
        )
    ));

希望它有所帮助。