Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr查询包含“@”字符时无法按预期工作_Solr_Lucene - Fatal编程技术网

Solr查询包含“@”字符时无法按预期工作

Solr查询包含“@”字符时无法按预期工作,solr,lucene,Solr,Lucene,我有一个名为email\u txt的text\u general类型的字段,其中包含abc@xyz.com, 我试图创建一个只搜索用户名而忽略域的查询 我的查询如下所示: email_txt:*abc*@* 这将产生0个结果。我希望在用户名包含abc的地方收到结果,比如abcdefg@xyz.com,fooabc@xyzbuzz.com,barabcefg@fizzxyz.com,abc@fizz.com。是的,我确信我有这种类型的数据,即使我尝试email\u txt:*.@*,它也不起作用

我有一个名为
email\u txt
text\u general
类型的字段,其中包含
abc@xyz.com
, 我试图创建一个只搜索用户名而忽略域的查询

我的查询如下所示:

email_txt:*abc*@*
这将产生0个结果。我希望在用户名包含
abc
的地方收到结果,比如
abcdefg@xyz.com
fooabc@xyzbuzz.com
barabcefg@fizzxyz.com
abc@fizz.com
。是的,我确信我有这种类型的数据,即使我尝试
email\u txt:*.@*
,它也不起作用

如果我尝试以下方法:

email_txt:*abc*
它工作,并产生多个结果,包括来自上面的所需结果,但也包括域包含
abc
的情况,如
fizz@helpmeabc.com
,这是不需要的

我看了一下(以防我发疯),它证实了
@
不是一个特殊的角色。即便如此,我还是试图这样逃避(以防万一,我会发疯):

  • 尽管如此,仍有0个结果
现在是实际问题。
@
是特殊字符吗?如果是的话,它怎么能被转义呢?如果不是的话,我在查询中做错了什么?我真的不知道我的逻辑是否有缺陷,或者我是否遗漏了什么


注意:我使用的是solr版本6.3.0,当您使用StandardTokenizer(默认字段类型为
text\u general
text\u en
,等等,默认情况下使用)时,文档是6.6(最接近可用的)

,当出现
@
符号时,内容将被拆分为令牌。这意味着在您的示例中,实际上存储了两个或三个令牌,(
izz
helpmeabc.com
)或(
izz
helpmeabc
com

通配符匹配是针对标记本身应用的(除非使用复杂短语查询解析器),其中不进行标记化和筛选(多术语感知筛选器(如小写筛选器)除外)

其效果是,您的查询,
*abc**
尝试匹配包含
@
的标记,但由于索引时的处理在
@
上拆分,并基于该字符分隔标记,因此没有标记包含
@
,因此不会给您任何点击


您可以使用
字符串
字段类型或
关键字标记器
与小写筛选器等筛选器配对,以或多或少地将原始输入作为完整的标记来获取。

字段类型是什么?如果是标准的
text\u en
类型,则内容通常在
@
上拆分,最终结果是索引中的两个标记(并且通配符匹配仅针对单个标记运行)。改用
字符串
字段类型。它是
text\u general
类型的动态字段。我想这对于
\u en
是正确的,对于
\u general
也是正确的。我还将该字段作为
字符串
类型,我已经尝试过了,它显然有效。谢谢你,你介意写下来作为回答,这样我就可以接受了吗?
email_txt:*abc*\@*