gpt4 book ai didi

c# - ElasticSearch电子邮件地址,带有特殊字符,例如@

转载 作者:行者123 更新时间:2023-12-02 22:54:30 25 4
gpt4 key购买 nike

我正在使用ElasticSearch v6.8和NEST客户端,编写C#代码。我正在使用流利的映射。

我正在为电子邮件字段建立索引,因此可以通过搜索其电子邮件地址来找到用户。标准分析器无法正常工作,然后我使用uax_url_email标记器继续阅读。我插入了它,它比标准分析仪更好,但是我仍然无法使用@字符或'。'进行搜索。字符。示例:输入“firstname”会得到一个匹配项。输入的“名字@”不匹配。输入“firstname.lastname”也不匹配。

我究竟做错了什么?我假设uax_url_email标记生成器将处理此问题。我改用NGram,然后它可以工作,但是对于现有的内置电子邮件分析器不处理@符号和类似符号似乎有点奇怪。

这是我的字段映射(这是一个纯字符串):

 .Map<UserSearchEntity>(
m => m
.AutoMap()
.Properties(p => p
.Text(t => t
.Name(n => n.Email)
.Analyzer("user_email_analyzer")))

该分析器先前已使用uax_url_email token 生成器进行了注册。

最佳答案

这是一个简单的应用程序,显示了uax_url_email token 生成器的用法。

{
var createIndexResponse = await client.CreateIndexAsync("my_index", c => c
.Settings(s => s.Analysis(a => a
.Analyzers(an => an.Custom("my_analyzer", cu => cu.Tokenizer("my_tokenizer")))
.Tokenizers(t => t.UaxEmailUrl("my_tokenizer", u => u.MaxTokenLength(3)))))
.Mappings(m => m
.Map<Document>(map => map
.Properties(p => p.Text(t => t.Name(n => n.Email).Analyzer("my_analyzer"))))));

var indexResponse = await client.IndexAsync(new Document {Id = "1", Email = "robert.lyson@domain.com"},
i => i.Refresh(Refresh.WaitFor));

await Search(client, "robert.lyson");
await Search(client, "robert");
await Search(client, "lyson");
await Search(client, "@domain.com");
await Search(client, "domain.com");
await Search(client, "rob");
}

private static async Task Search(ElasticClient client, string query)
{
var searchResponse = await client.SearchAsync<Document>(s => s
.Query(q => q.Match(m => m.Field(f => f.Email).Query(query))));

System.Console.WriteLine($"result for query \"{query}\": {string.Join(",", searchResponse.Documents.Select(x => x.Email))}");
}

public class Document
{
public string Id { get; set; }
public string Email { get; set; }
}

输出:
result for query "robert.lyson": robert.lyson@domain.com
result for query "robert": robert.lyson@domain.com
result for query "lyson": robert.lyson@domain.com
result for query "@domain.com": robert.lyson@domain.com
result for query "domain.com": robert.lyson@domain.com
result for query "rob": robert.lyson@domain.com

已通过elasticsearch 6.8.0和NEST 6.8.x测试。

希望能有所帮助。

关于c# - ElasticSearch电子邮件地址,带有特殊字符,例如@,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59955226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com