gpt4 book ai didi

elasticsearch - 索引字段中的特殊字符

转载 作者:行者123 更新时间:2023-12-02 22:32:34 26 4
gpt4 key购买 nike

使用查询字符串过滤器搜索电子邮件地址时,我遇到一些有趣的行为:

.filteredQuery(
queryStringQuery(String.format("*%s*", query))
.field("firstName").field("lastName").field("email").field("phone"),
null
)

如果我将 domain.com作为查询传递(假设索引中有这样的值)-结果很好,但是一旦我通过 @domain.com-结果为空。.特殊符号是否有某些限制?

最佳答案

如果您将其设置为true analyze_wildcard,则应该可以使用。默认情况下,查询字符串不会分析那些包含通配符的标记。如果将该选项设置为true,elasticsearch将尝试。正如doc所说,此选项并不完美:

By setting this value to true, a best effort will be made to analyze those as well.



空结果背后的原因是默认分析器正在删除 @,并且当搜索 *@domain.com*analyze_wildcard为false时,在查询时不会删除 @

代码如下:
.filteredQuery(
queryStringQuery(String.format("*%s*", query)).analyzeWildcard(true)
.field("firstName").field("lastName").field("email").field("phone"),
null
)

编辑:为什么你得到空结果更好的解释。

首先,可以在索引(您在映射中进行设置)时和查询时执行分析器(并非所有查询都在查询时执行分析器)

在您的情况下,在索引时间 standard analyzer正在分析字段 email,如下所示:
name@domain.com =>正在被索引 namedomain.com
这意味着您的文档将包含两个 token namedomain.com。如果您尝试查找 exact term“name@domain.com”,则找不到任何内容,因为您的文档不再包含完整的电子邮件。

现在在查询时,您正在执行查询字符串 *@domain.com*。默认情况下,查询字符串不会分析那些包含通配符的标记,因此您试图查找包含 @domain.com的标记(而不是索引)。

现在,如果您将 analyze_wildcard属性设置为true。 Elasticsearch使用通配符分析这些 token ,因此您的查询将转换为 *domain.com*,在这种情况下,您具有匹配的文档。

关于elasticsearch - 索引字段中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31646933/

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