我有一个索引文档,如下所示:
{"id:"abcde-efgr-jhik","domain": "http://www.play-bugs.com/index.com}
在域字段上,我使用text_general作为数据类型。
我尝试使用
查询此文档q=domain:play-bugs
它不会返回任何结果,但是如果我使用
q=domain:play-bugs.com
它按预期给我结果。我试图在“ - ”字符上使用“/”但没有运气。
编辑:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
答案 0 :(得分:0)
这是使用Solr Standard Tokenizer时的预期行为。
此标记生成器将文本字段拆分为标记,处理空格 和标点符号作为分隔符。分隔符字符被丢弃, 除以下情况外:
未跟随空格的句点(点)将作为其中一部分保留 令牌,包括互联网域名。
&#34; @&#34; character是令牌分裂标点符号的集合之一,所以 电子邮件地址不会保留为单个令牌。
请注意,单词以连字符分开。
当text_general
从输入流收到domain
的内容时,会将其标记为:
http://www.play-bugs.com/index.com => http | www.play |
的 bugs.com
强> | index.com
play-bugs => play | bugs
play-bugs.com => play |
的 bugs.com
强> 您可以看到play-bugs.com
可以与bugs.com
匹配而play-bugs
无法匹配,因为如果没有后跟空格,则不会将点视为分隔符。索引中没有令牌"bugs"
,因此即使使用查询q=domain:bugs
,您也无法与之匹配。
您可以尝试使用另一个也在点上分割的标记生成器,或添加像Word Delimiter Graph Filter这样的过滤器来正确分割生成的标记。