【发布时间】:2015-06-18 19:37:56
【问题描述】:
我的弹性搜索有问题。
设置:拥有带有数据字段“companyName”的 Company-Class。 我的搜索将搜索并回复所有带有搜索词的公司。
如果我尝试通过排序
.Sort(x=> x.OnField(x => x.CompanyName).Descending())
数据未正确排序 - 参考 stackOverflow
我尝试了给定的解决方案,但如果我将 companyName 设置为“not_analyzed”,我什至无法再搜索公司名称或像开头的“goo”(谷歌) 所以我尝试设置一个多字段映射,带有一个不分析的后缀和一个已分析的后缀。
我的索引设置如下:
client.CreateIndex(IndexName, c => c
.AddMapping<Exhibitor>(m =>m
.MapFromAttributes()
.Properties(o => o
.MultiField(mf=>mf
.Name(x=>x.CompanyName)
.Fields(fs => fs
.String(s=>s.Name(t=>t.CompanyName).Index(FieldIndexOption.Analyzed).Analyzer("standard"))
.String(s=>s.Name(t=>t.CompanyName.Suffix("raw")).Index(FieldIndexOption.NotAnalyzed))))
)
)
)
);
我的搜索结果如下:
string SearchTerm ="my search term"
results = GetClient().Search<Company>(s => s
.Query(qa => qa
.MatchPhrasePrefix(m => m
.OnField(f=>f.CompanyName)
.Query(SearchTerm)
))
.Sort(x => x.OnField(x => x.CompanyName.Suffix("raw")).Descending())
.Size(maxResults).Skip(page * pageSize).Take(pageSize)
);
但这仍然行不通。 有什么想法吗?
提前致谢。
更新 1:
对于不区分大小写的排序,我添加了一个自定义分析器:
var companyAnalyzer = new CustomAnalyzer
{
Filter = new List<string> { "standard", "lowercase" },
Tokenizer = "keyword"
};
client.CreateIndex(IndexName, c => c
.Analysis(analysis => analysis
.Analyzers(a => a
.Add("companyanalyzer", companyAnalyzer)
)
)
.AddMapping<Exhibitor>(m => m
.MapFromAttributes()
.Properties(o => o
.MultiField(mf => mf
.Name(x => x.CompanyName)
.Fields(fs => fs
.String(s => s.Name(t => t.CompanyName).Index(FieldIndexOption.Analyzed).Analyzer("standard"))
.String(s => s.Name(t => t.CompanyName.Suffix("raw")).Index(FieldIndexOption.Analyzed).Analyzer("companyanalyzer"))))
)
)
);
【问题讨论】:
标签: c# sorting elasticsearch nest