嗨,我有一个具有以下架构的字段,
<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。
该模式在这种情况下不起作用的模式。 我可以在查询中指定什么吗?
答案 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行为部分。