2016-06-16 1 views
0

mon code est-il .. utilise nid, ElasticSearch 2.3.0 Version je veux mapping (+ analyseur personnalisé) create index & ...analyseur d'index ne fonctionne pas avec Elasticsearch.net Et Nest

mais la cartographie n'est pas erreur d'appel infructueuse de bas niveau!

s'il vous plaît, vérifier le code et l'examen pour moi

var node = new Uri("http://localhost:9200"); 
var settings = new ConnectionSettings(node); 
var client = new ElasticClient(settings); 
var request = new IndexExistsRequest("aa"); 
var result = client.IndexExists(request); 
if (result.Exists == true) 
{ 
    client.DeleteIndex("aa", null); 
} 
var ilhee_Custom = new CustomAnalyzer 
{ 
    Filter = new List<string> { "lowercase", "stop", "standard", "snowball" }, 
    Tokenizer = "standard" 
}; 
List<Person> categList = new List<Person>(); 
var Person = new Person 
{ 
    id = 1, 
    Firstname = "an apples bananas boxes, the sun.", 
    Lastname = "a beautiful womens with a good guys in there" 
}; 
categList.Add(Person); 

var response = client.CreateIndex("aa"); 

var mappingResponse = client.Map<Person>(d => d 
    .Properties(props => props 
     .String(s => s 
      .Name(p => p.Firstname) 
      .Index(FieldIndexOption.Analyzed) 
      .Analyzer("ilhee_Custom") 
     ) 
     .String(s1 => s1 
      .Name(p1 => p1.Lastname) 
      .NotAnalyzed() 
     ) 
    ) 
    .Index("aa") 
    .Type("person") 
); 

var b = client.IndexMany<Person>(categList, "aa", "person"); 

Répondre

0

Vous créez un analyseur personnalisé, mais vous ne l'envoyez pas à ElasticSearch, donc quand il vient à l'utiliser dans un mappage, ElasticSearch sait rien l'analyseur personnalisé.

Vous pouvez créer un nouvel index avec analyse et mappages en une seule requête. Voici un exemple de création d'un index, l'ajout de votre analyseur personnalisé et la cartographie dans le cadre de la création d'index

void Main() 
{ 
    var node = new SingleNodeConnectionPool(new Uri("http://localhost:9200")); 
    var settings = new ConnectionSettings(node) 
     // set "aa" as the default index; if no index 
     // is specified for a type or in the request, 
     // the default index will be used 
     .DefaultIndex("aa"); 

    var client = new ElasticClient(settings); 

    var indexExistsResponse = client.IndexExists("aa"); 
    if (indexExistsResponse.Exists) 
    { 
     client.DeleteIndex("aa", null); 
    } 

    var people = new List<Person>{ 
     new Person 
     { 
      id = 1, 
      Firstname = "an apples bananas boxes, the sun.", 
      Lastname = "a beautiful womens with a good guys in there" 
     } 
    }; 

    var createIndexResponse = client.CreateIndex("aa", c => c 
     .Settings(s => s 
      .Analysis(a => a 
       .Analyzers(ad => ad 
        // give the custom analyzer a name 
        .Custom("ilhee_Custom", ca => ca 
         .Tokenizer("standard") 
         .Filters("lowercase", "stop", "standard", "snowball") 
        ) 
       ) 
      ) 
     ) 
     .Mappings(m => m 
      .Map<Person>(d => d 
       .Properties(props => props 
        .String(s => s 
         .Name(p => p.Firstname) 
         .Analyzer("ilhee_Custom") 
        ) 
        .String(s1 => s1 
         .Name(p1 => p1.Lastname) 
         .NotAnalyzed() 
        ) 
       ) 
      ) 
     ) 
    ); 

    var indexManyResponse = client.IndexMany<Person>(people, "aa"); 

    // refresh the index after indexing, so that newly indexed documents 
    // are available in search results. 
    client.Refresh("aa"); 

    var searchResponse = client.Search<Person>(s => s 
     .Query(q => q 
      .Match(m => m 
       .Field(p => p.Firstname) 
       .Query("boxes") 
      ) 
     ) 
    ); 
} 


public class Person 
{ 
    public int id { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set;} 
} 

La recherche retourne notre document, indexé comme prévu

{ 
    "took" : 9, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 0.15342641, 
    "hits" : [ { 
     "_index" : "aa", 
     "_type" : "person", 
     "_id" : "1", 
     "_score" : 0.15342641, 
     "_source" : { 
     "id" : 1, 
     "firstname" : "an apples bananas boxes, the sun.", 
     "lastname" : "a beautiful womens with a good guys in there" 
     } 
    } ] 
    } 
} 
+0

je l'apprécie vraiment! THX!!! –

+0

J'ai encore une question ..! où puis-je ajouter le stopword_path ?? –

+0

Définissez votre propre filtre de jetons 'stop' avec le stopword_path spécifié et utilisez-le dans votre analyseur personnalisé - https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-tokenfilter.html –