无法使用带通配符的 solr 查询搜索电子邮件 ID 字段
Cannot search on email id field using solr query with wildcard
我的 table 中有一个电子邮件 ID 字段,其中启用了通配符
的 solr 搜索
一封电子邮件abc.xyz@pqr.com
每当我搜索时 abc.xyz*
我都可以搜索,如果我搜索 pqr.com* 我可以搜索但是每当我搜索 abc.xyz@pqr.com*
我没有得到任何结果。
下面是xml字段的配置
<field indexed="true" multiValued="false"
name="user_email_id" stored="true" type="TextField"/>
下面是生成的查询
SELECT * FROM example WHERE
solr_query='{"q":"user_email_id:Shubha.Sao@techdata.com*","start":0}' LIMIT 50;
问题是您的电子邮件被分成了令牌,而不是完整的电子邮件,您很可能得到 2 个令牌:Shubha.Sao
和 techdata.com
。您可以在 Solr UI.
中检查当前分词器如何拆分文本
您需要使用 StrField
,而不是 TextField
的默认值 StandardAnalyzer
,或者自定义分析器以避免电子邮件标记化 - 例如,您可以使用 KeywordTokenizer
这将使电子邮件保持完整,但您可以应用其他过滤器,例如 LowerCaseFilter
。或者你可以使用 UAX29URLEmailTokenizer.
我的 table 中有一个电子邮件 ID 字段,其中启用了通配符
的 solr 搜索一封电子邮件abc.xyz@pqr.com
每当我搜索时 abc.xyz*
我都可以搜索,如果我搜索 pqr.com* 我可以搜索但是每当我搜索 abc.xyz@pqr.com*
我没有得到任何结果。
下面是xml字段的配置
<field indexed="true" multiValued="false"
name="user_email_id" stored="true" type="TextField"/>
下面是生成的查询
SELECT * FROM example WHERE
solr_query='{"q":"user_email_id:Shubha.Sao@techdata.com*","start":0}' LIMIT 50;
问题是您的电子邮件被分成了令牌,而不是完整的电子邮件,您很可能得到 2 个令牌:Shubha.Sao
和 techdata.com
。您可以在 Solr UI.
您需要使用 StrField
,而不是 TextField
的默认值 StandardAnalyzer
,或者自定义分析器以避免电子邮件标记化 - 例如,您可以使用 KeywordTokenizer
这将使电子邮件保持完整,但您可以应用其他过滤器,例如 LowerCaseFilter
。或者你可以使用 UAX29URLEmailTokenizer.