带连字符的Solr查询返回零结果

时间:2017-12-27 08:29:11

标签: solr

我有一个索引文档,如下所示:

{"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>

1 个答案:

答案 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这样的过滤器来正确分割生成的标记。