2015-08-23 197 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) 
    ) 
));