我有我创建了一个公司类型。 内部的公司类型的我有一个名为“摘要”字段。 我怎样才能多指数分析仪添加到这个领域?
我简要地看着使用Yakaz插件,但它不会出现,我可以使用与窝。
这背后的原因是,有时用户会为公司名称搜索,在他们的查询,其他时间他们将不包括周期的周期。 我想这样做使用的n-gram双方的公司名称有和没有标点符号部分匹配。 我目前使用禁用词过滤器除去标点符号。
摘要字段的属性(拥有多个指标分析仪抛出一个错误):
[ElasticProperty(IndexAnalyzer = "partial_match", IndexAnalyzer = "partial_match_no_punctuation", SearchAnalyzer = "full_match")]
public string Summary { get; set; }
制图:
private static void CreateMapping(ElasticClient client)
{
var partialMatchNoPunctuation = new CustomAnalyzer
{
Filter = new List<string> { "standard", "lowercase", "asciifolding", "punctuation_filter", "name_ngrams" }, //Apply all filters before ngram
Tokenizer = "standard"
};
var partialMatch = new CustomAnalyzer
{
Filter = new List<string> { "standard", "lowercase", "asciifolding", "name_ngrams" }, //Apply all filters before ngram
Tokenizer = "standard"
};
var fullMatch = new CustomAnalyzer
{
Filter = new List<string> { "standard", "lowercase", "asciifolding" },
Tokenizer = "standard"
};
client.CreateIndex(Settings.Default.IndexName, c => c
.Analysis(descriptor => descriptor
.TokenFilters(bases => bases
.Add("name_ngrams", new NgramTokenFilter
{
MaxGram = 11,
MinGram = 3
})
.Add("punctuation_filter", new StopTokenFilter
{
Stopwords = new List<string> {"."}
})
)
.Analyzers(bases => bases
.Add("partial_match", partialMatch)
.Add("partial_match_no_punctuation", partialMatchNoPunctuation)
.Add("full_match", fullMatch))
)
);
}
另外,如果有一种方法在一个单一的分析要做到这一点我很开放的建议。
编辑:
我的类名是“ElasticSearchProject”。 我想它被存储为一个名为“工程”的类型。 我相信我在这个尝试是什么原因造成的错误。 当我得到的映射类型的项目,它不仅具有适用于它的部分匹配分析。
这是唯一的ES属性仍适用于我的课:
[ElasticType(Name = "Project")]
多字段映射:
.AddMapping<ElasticSearchProject>(m => m
.MapFromAttributes()
.Properties(project=>project
.MultiField(mf=>mf
.Name("Project")
.Fields(f=>f
.Number(s=>s.Name(o=>o.Id).Index(NonStringIndexOption.no))
.String(s => s.Name(o => o.Summary).IndexAnalyzer("partial_match"))
.String(s => s.Name(o => o.Summary).IndexAnalyzer("partial_match_no_punctuation"))
))))