问题描述
我正在尝试使用 Elasticsearch.Net v7.7 在我的新索引中创建索引并使用精确值进行搜索
public class Student
{
public int Id { get; set; }
public Info PersonalInfo { get; set; }
public DateTime CreatedDate { get; set; }
}
public class Info
{
public string Name { get; set; }
public string Email { get; set; }
}
client.Indices.Create(this.DefaultIndex,c => c
.Settings(s => s
.Analysis(a => a.Analyzers(an => an.Custom("email",cus => cus.Tokenizer("uax_url_email")))))
.Map<Student>(map => map
.DynamicTemplates(dy => dy.DynamicTemplate("PersonalInfo",d => d.PathMatch("PersonalInfo.Email").Mapping(m => m.Text(t => t
.Name(n => n.PersonalInfo.Email)
.Analyzer("email")
))))
.AutoMap()
)
);
我拥有的学生名单
var students = new List<Student>() {
new Student() {
Id = 1,PersonalInfo = new Info() {
Name = "Test 1",Email = "test1.student@domain.com",},CreatedDate = DateTime.Now
},new Student() {
Id = 2,PersonalInfo = new Info() {
Name = "Test 2",Email = "test2.student@domain.com",new Student() {
Id = 3,PersonalInfo = new Info() {
Name = "Test 3",Email = "test3.student@domain.com",CreatedDate = DateTime.Now
}
}
然后使用以下方法索引所有学生
public BulkResponse IndexAllStudents(List<Student> students)
{
return client.IndexMany(students,this.DefaultIndex);
}
当我尝试搜索确切的电子邮件地址“test1.student@domain.com”时
var result = client.Search<Student>(s => s
.From(0).Size(10)
.Query(q => q.Match(m => m
.Query("test1.student@domain.com")
.Field(fi => fi.PersonalInfo.Email)
.Analyzer("email")
)
).sort(q => q.Descending(fi => fi.CreatedDate)));
结果给了我 0 个文档
但是当我尝试在没有分析器的情况下进行搜索时
var result = client.Search<CreditApplication>(s => s
.From(0).Size(10)
.Query(q => q.Match(m => m
.Query("test1.student@domain.com")
.Field(fi => fi.PersonalInfo.Email)
)
).sort(q => q.Descending(fi => fi.CreatedDate)));
结果给了我所有被索引的学生。
以上结果都不是我所期望的。使用“test1.student@domain.com”进行搜索时,我只想接收 Id = 1 的学生。
我不确定我做错了什么。有人有什么建议吗?
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)