NEST Fuzziness没有发送正确的JSON

时间:2016-09-15 17:47:03

标签: c# json asp.net-mvc elasticsearch nest

以下JSON是我需要MVC NEST发送的请求:

{
  "query": {
    "multi_match": {
      "text": {
       "fields": "_all",            
        "query":     "monelo",
        "fuzziness": "AUTO",
        "operator":  "and"
      }
    }
  }
}

这是发送的JSON,(缺少文本节点,为了获得模糊的结果,这似乎是至关重要的。)

{
  "query": {
    "multi_match": {
       "fields": "_all",            
        "query":     "monelo",
        "fuzziness": "AUTO",
        "operator":  "and"
    }
  }
}

生成上述JSON并按照请求发送:

var productsQuery =
client.Search<Elastic.Product>(s => s.Index(indexName).Type("products").Query(q => q.QueryString(qstr => qstr
.Fields("_all")
.Fuzziness(Fuzziness.Auto)
.Query("*" + query + "*")))
.Size(100));

我使用Fiddler调试,如果我添加文本节点,那么我会得到所需的结果。

所以,我要么做得不对,要么我正在使用的NEST客户端不是最新的Elasticsearch REST规范。

我花了几个小时,如果不是一天研究文档,我确实尝试了每种查询类型和每个属性。

还尝试使用LowLevelClient发送带有原始json的请求,但这不允许我将检索到的结果反序列化为多个Elastic.Product对象。

1 个答案:

答案 0 :(得分:0)

使用Bool查询解决,使用must和should子句。

            var productsQuery =
                client.Search<Elastic.Product>(s => s.Index(indexName).Type("products").Query(q => q.Bool(b =>
                        b.Must(mq => mq.Fuzzy(f => f.Field("_all").Value(query.ToLower()).Fuzziness(Fuzziness.Auto)))
                        .Should(sq => sq.QueryString(sqqs => sqqs.DefaultField("_all").Query("*" + query.ToLower() + "*")))))
                        .From(0)
                        .Size(100)
                        .Sort(ss => ss.Field(f => f.Field("displayName"))));