NEST Returns 模糊搜索上没有任何内容

NEST Returns Nothing on Fuzzy Search

我在 Sense 中使用以下查询并返回了一些结果:

POST myindex/mytype/_search
{
  "query": {
        "fuzzy_like_this_field" : {
            "BookLabel" : {
                "like_text" : "myBook",
                "max_query_terms" : 12
            }
        }
    }
}

但是使用 Nest 的以下代码我什么也得不到:

    var docs = client.Search<dynamic>(b => b
            .Index("myindex")
            .Type("mytype")
                .Query(q => q
                    .Fuzzy(fz => fz
                        .OnField("BookLabel")
                        .Value("myBook")
                    )
                )
        ).Documents.ToList(); 

我看不出它们之间的区别。我错过了什么?

上面的 NEST 查询会生成以下查询 DSL

{
  "query": {
    "fuzzy": {
      "BookLabel": {
        "value": "myBook"
      }
    }
  }
}

要获得最接近 fuzzy_like_this_field 查询的等价物 (which is deprecated in Elasticsearch 1.6.0 and will be removed in 2.0),您可以 运行 一个 fuzzy_like_this 查询只在你感兴趣的领域

void Main()
{
    var settings = new ConnectionSettings(new Uri("http://localhost:9200"));
    var connection = new InMemoryConnection(settings);
    var client = new ElasticClient(connection: connection);

    var docs = client.Search<dynamic>(b => b
        .Index("myindex")
        .Type("mytype")
        .Query(q => q
            .FuzzyLikeThis(fz => fz
                .LikeText("myBook")
                .MaxQueryTerms(12)
                .OnFields(new [] { "BookLabel" })                           
            )
        )
    );

    Console.WriteLine(Encoding.UTF8.GetString(docs.RequestInformation.Request));
}

这将输出以下查询 DSL

{
  "query": {
    "flt": {
      "fields": [
        "BookLabel"
      ],
      "like_text": "myBook",
      "max_query_terms": 12
    }
  }
}

这应该会产生与您在 Sense 中看到的相同的结果。