如何解决Solr查询包含`@`字符时无法按预期工作
我有一个名为email_txt
的{{1}}字段,其中包含text_general
类型的电子邮件列表,
并且我正在尝试创建一个查询,该查询将仅搜索用户名而不理会域。
我的查询看起来像这样:
abc@xyz.com
这将产生0个结果。我希望收到用户名包含email_txt:*abc*@*
的结果,例如abc
,abcdefg@xyz.com
,fooabc@xyzbuzz.com
,barabcefg@fizzxyz.com
。是的,我有信心我拥有该类型的数据,即使我尝试abc@fizz.com
也无法使用。
如果我尝试类似的操作:
email_txt:*@*
它可以正常工作,并产生多种结果,包括上面期望的结果,但是在域包含email_txt:*abc*
(例如abc
)的情况下也是不希望的。
我看过documentation(以防万一我发疯了),它确认fizz@helpmeabc.com
不是一个特殊字符。即便如此,我还是试图像这样逃避它(以防万一,我要发疯了):
@
- 仍然,0个结果
现在是实际问题。 email_txt:*abc*\@*
是一个特殊字符吗?如果是这样,如何将其转义,如果不是,我在查询中做错了什么?我真的无法分辨我的逻辑是否有缺陷,或者我是否缺少某些东西。
注意:我使用的是solr版本6.3.0,该文档适用于6.6(最接近的版本)
解决方法
当您使用StandardTokenizer时(默认使用默认字段类型text_general
,text_en
等),当@
符号时,内容将被拆分为令牌发生。这意味着在您的示例中,实际上存储了两个或三个令牌(izz
和helpmeabc.com
)或{izz
,helpmeabc
和com
)
通配符匹配是自己针对令牌应用的(除非使用复杂的短语查询解析器),其中不会进行令牌化和过滤(除了小写过滤器等多术语感知过滤器)。
结果是您的查询*abc*@*
试图匹配包含@
的令牌,但是由于索引时的处理在@
上拆分,并根据该令牌进行分离字符,没有标记包含@
-因此不会给您带来任何点击。
您可以使用string
字段类型或与过滤器(例如小写过滤器等)配对的KeywordTokenizer
来或多或少地将原始输入作为一个完整的令牌。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。