如何搜索可能包含空格和连接数字的字段?

时间:2018-11-13 12:15:04

标签: solr lucene solr6

嗨,我有一个具有以下架构的字段,

  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" generateNumberParts="1" protected="protwords.txt" splitOnCaseChange="1" generateWordParts="0" preserveOriginal="1" catenateAll="0" catenateWords="1"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="0" protected="protwords.txt" splitOnCaseChange="1" generateWordParts="0" preserveOriginal="1" catenateAll="0" catenateWords="0"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
  </fieldType>

我正在存储完整的pdf文档。

现在假设我有4个文档,内容如下。

1. stackoverflow is a good site.
2. stack-overflow is a good site.
3. stack overflow is a good site.
4. stackoverflow2018 is a good site. 

现在,当我搜索stackoverflow时,它应该返回1, 当我搜索stack-overflow时,应该返回我2。 当我搜索stack overflow时,应该返回我3。 当我搜索stackoverflow2018时,它应该返回4。

该模式在这种情况下不起作用的模式。 我可以在查询中指定什么吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,Word Delimiter Graph Filter将拆分为非字母数字(-),大小写更改和数字。

  

确定定界符的规则如下:

     

单词中的大小写更改:“ CamelCase”->“ Camel”,“ Case”。这个   可以通过设置splitOnCaseChange =“ 0”来禁用。

     

从字母到数字字符的转换,反之亦然:   “ Gonzo5000”->“ Gonzo”,“ 5000”“ 4500XL”->“ 4500”,“ XL”。这可以是   通过设置splitOnNumerics =“ 0”禁用。

     

非字母数字字符(已舍弃):“热点”->“热点”,“热点”

     

尾部的“'s”已删除:“ O’Reilly’s”->“ O”,“ Reilly”

     

任何前导或结尾定界符都将被丢弃:“ --hotspot--”->   “热门”,“现场”

如果您不希望这种行为,请从过滤器列表中删除WordDelimiterFilter并添加其他过滤器以支持所需的WDF行为部分。