2015-08-23 149 views
0

我的ElasticSearch查询短语有问题。 我的索引文件是;ElasticSearch-NEST查询字符串短语

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*\"") 

这句话。

编辑

Person类

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()) 
+0

你可以分享索引映射和'Person'类吗? – Rob

+0

@Rob,我分享他们 – Stormcloak

回答

0

documentation简单的查询字符串:

“包装许多标志来表示一个短语进行搜索

当你正在寻找.Query("\"ali ah*\"")实际上它看起来词组ali ah*,但*不被视为通配符。

Chnage您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*") 
     ) 
    )); 

希望它能帮助。

+0

谢谢Rob。但您的查询与“ali or ah *”匹配是等同的。我不想要这个。字顺序对我来说非常重要。第一个单词必须“阿里”,第二个单词是“啊*”。 – Stormcloak

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) 
    ) 
));