2015-08-23 3 views
0

J'ai un problème avec les expressions de requête ElasticSearch. Mon document d'index est;Expression de chaîne de requête ElasticSearch-NEST

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

Ma phrase de recherche est;

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

Le document est vide. Mais quand je change ma phrase à

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

le résultat est à venir. Pourquoi retourner le résultat vide de

.Query("\"ali ah*\"") 

cette phrase.

EDIT

personne Classe

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

cartographie Index

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

Pouvez-vous également partager le mappage d'index et la classe 'Person'? – Rob

+0

@Rob, je les partage – Stormcloak

Répondre

0

De documentation pour simple chaîne de requête:

"encapsule un nombre de jetons pour signifier une phrase pour la recherche

Lorsque vous recherchez .Query("\"ali ah*\"") en fait, il semble pour la phrase ali ah*, mais * est pas considéré comme caractère générique.

chnage votre requête 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*") 
     ) 
    )); 

Hope it helps.

+0

Merci Rob. Mais votre requête est égale à "ali or ah *". Je ne veux pas ça. L'ordre des mots est très important pour moi. Le premier mot doit "ali" et le second mot est "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) 
    ) 
));