ElasticSearch-NEST查询字符串短语

时间:2015-08-23 14:44:35

标签: elasticsearch query-string nest

我遇到ElasticSearch查询短语的问题。 我的索引文件是;

    var person = new Person
    {
        Id = "4",
        Firstname = "ali ahmet",
        Lastname = "yazıcı"
    };
    var index = client.Index(person, x => x.Index("personindex"));

我的搜索短语是;

    var result = client.Search<Person>(s => s
        .From(0)
        .Size(10)
        .Query(q => q
            .SimpleQueryString(qs => qs
                .OnFields(new[]{"firstname","lastname"})
                .Query("\"ali ah*\"")
            )
        )
  );

结果文档为空。但是当我把我的短语改为

.Query("\"ali ahmet\"")

结果即将到来。为什么从

返回空结果
.Query("\"ali ah*\"")

这句话。

修改

人员类

public class Person
{
    public string Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

索引映射

var response = client.CreateIndex("personindex", c => c
            .AddMapping<Person>(m => m.MapFromAttributes())

2 个答案:

答案 0 :(得分:0)

来自documentation的简单查询字符串:

  

&#34;包装了许多代币以表示搜索的短语

当您搜索.Query("\"ali ah*\"")时,它实际上会查找短语ali ah*,但*不会被视为通配符。

将您的NEST查询发送至:

var result = client.Search<Person>(s => s
    .Explain()
    .From(0)
    .Size(10)
    .Query(q => q
        .QueryString(qs => qs
            .OnFields(new[] {"firstname", "lastname"})
            .Query("ali ah*")
        )
    ));

希望它有所帮助。

答案 1 :(得分:0)

var result = client.Search<Person>(s => s
.Explain()
.From(0)
.Size(10)
.Query(q => q
    .Match(qs => qs
        .OnFields(new[] {"firstname", "lastname"})
        .Query("ali ah*")
        .MinimumShouldMatch(100)
    )
));