Elasticsearch Nest字段boost + fuzzy

时间:2016-02-22 10:16:35

标签: .net elasticsearch nest

我正在尝试使用.NET连接可用性设置Elasticsearch环境。我能够使用自定义模糊距离进行基本查询,但我无法做的是在查询时进行字段提升。 我已经尝试了几个教程/问题,例如Elasticsearch Nest Boost queryElastic Search using NEST Field Boosting,但是NEST不会识别" .OnFieldsWithBoost"或" .OnFields"。

我能够通过弹性搜索的HTTP API进行一些字段提升:

POST /products/typeproduct/_search
{
  "query" : {
   "bool": {
      "should": [
        {
          "match": {
            "Title": {
              "query": "sometest",
              "boost": 10.0 
            }
          }
        },
        {
          "match": { 
            "Name": "sometest"
          }
        }
      ]
    }
  }
}

但我再次无法通过NEST语法匹配此查询,因为它不允许多次"匹配" es"应该"。

我的最终目标是能够提升某些字段(标题)而不是其他字段(名称),并在匹配中添加一些模糊性。 任何帮助将不胜感激。

我的弹性搜索版本:2.2.0 我的NEST版本:2.0.2

1 个答案:

答案 0 :(得分:5)

这是一个流畅的查询:

var response = client.Search<Document>(search => search
    .Query(q => q.Bool(b => b
        .Should(
            s => s.Match(m => m.Query("sometest").Field(f => f.Title).Boost(1.1)),
            s => s.Match(m => m.Query("sometest").Field(f => f.Name).Fuzziness(Fuzziness.EditDistance(1)))
        ))));

生成以下对elasticsearch的查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": {
              "boost": 1.1,
              "query": "sometest"
            }
          }
        },
        {
          "match": {
            "name": {
              "query": "sometest",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  }
}

我希望这就是你要找的东西:)