本文介绍如何使用Elasticsearch的默认德语分析器。 创建使用ElasticsearchCRUD的索引,它使用德语分析器对搜索和索引进行映射。
可以通过在ElasticsearchString属性中定义Analyzer
属性来使用德语分析器。 此属性为搜索和索引添加分析器。 该属性可以使用任何字符串,因此也可以定义自定义分析器。 Fields
属性也被设置。 这被使用,以便原始字符串也可以用于搜索。 Fields
属性使用Type
,该类可以定义该字段的子映射。
public class GermanData
{
public long Id { get; set; }
public string Name { get; set; }
public string FamilyName { get; set; }
[ElasticsearchString(Fields = typeof(FieldDataDefinition), Analyzer=LanguageAnalyzers.German)]
public string Info { get; set; }
}
public class FieldDataDefinition
{
[ElasticsearchString(Index=StringIndex.not_analyzed)]
public string Raw { get; set; }
}
然后使用映射创建索引:
_context.IndexCreate<GermanData>(indexDefinition);
现在可以将一些数据添加到索引中。
public void CreateSomeMembers()
{
var jm = new GermanData {Id = 1, FamilyName = "Moore", Info = "Muenich", Name = "John"};
_context.AddUpdateDocument(jm, jm.Id);
var jj = new GermanData { Id = 2, FamilyName = "Jones", Info = "Münich", Name = "Johny" };
_context.AddUpdateDocument(jj, jj.Id);
var pm = new GermanData { Id = 3, FamilyName = "Murphy", Info = "Munich", Name = "Paul" };
_context.AddUpdateDocument(pm, pm.Id);
var sm = new GermanData { Id = 4, FamilyName = "McGurk", Info = "munich", Name = "Séan" };
_context.AddUpdateDocument(sm, sm.Id);
var sob = new GermanData { Id = 5, FamilyName = "O'Brien", Info = "Not a much use, bit of a problem", Name = "Sean" };
_context.AddUpdateDocument(sob, sob.Id);
var tmc = new GermanData { Id = 6, FamilyName = "McCauley", Info = "Couldn't a ask for anyone better", Name = "Tadhg" };
_context.AddUpdateDocument(tmc, tmc.Id);
_context.SaveChanges();
}
如果将查询搜索发送到此索引和类型,则使用德语分析器中的词条,并找到所有不同的Munich
类型。 Munich, Münich, Muenich
和munich
都被索引,这些被保存为munich
词条。
这可以检查如下:
http://localhost:9200/germandatas/_analyze?&analyzer=german&text=Muenich munich Münich Munich
查询搜索发送如下:
POST http://localhost:9200/germandatas/germandata/_search HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 46
Expect: 100-continue
{ "query": { "match": {"info": "Muenich"} } }
搜索返回4个不同的结果,这与我们添加的数据相匹配。 这就是我们的期望:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 703
{
"took":1,"timed_out":false,"_shards":{
"total":5,"successful":5,"failed":0},"hits":{
"total":4,"max_score":1.0,"hits":[
{"_index":"germandatas","_type":"germandata","_id":"1","_score":1.0,"_source":{"id":1,"name":"John","familyname":"Moore","info":"Muenich"}},
{"_index":"germandatas","_type":"germandata","_id":"4","_score":0.30685282,"_source":{"id":4,"name":"Séan","familyname":"McGurk","info":"munich"}},
{"_index":"germandatas","_type":"germandata","_id":"2","_score":0.30685282,"_source":{"id":2,"name":"Johny","familyname":"Jones","info":"Münich"}},
{"_index":"germandatas","_type":"germandata","_id":"3","_score":0.30685282,"_source":{"id":3,"name":"Paul","familyname":"Murphy","info":"Munich"}}
]
}
}
使用ElasticsearchCRUD在Elasticsearch中使用内置语言分析器非常简单。 存在不同的博客,解释如何使用不同配置的不同German
分析仪。 这些也可以在ElasticsearchCRUD中配置为自定义分析器。 我没有对所有不同分析仪进行系统比较,以说哪一种更适合用于不同类型的数据。