我如何摆脱“。”使用 solr whitespacetokenizer 和 worddelimiterfilterfactory 时在标记的末尾

How do I get rid of "." at the end of a token when using solr whitespacetokenizer and worddelimiterfilterfactory

我有这段文字要标记化:

"let's buy a PowerShot-100 camera."

我正在使用空白分词器,然后是单词分隔符工厂。

worddelimiterfilterfactory 正在创建 "lets"、"let's"、"buy"、"a"、"Power"、"PowerShot"、[=] 等标记36=], "100" , "PowerShot100","camera." 以及 "camera" .

当我尝试 运行 像这样的短语查询时 "PowerShot-100 camera." 文档的 returned 但 "PowerShot-100 camera" 没有 return 任何东西。如果我传递 2 的斜率,它 return 就是文档。 "camera." 和 "camera" 两个标记的起始位置相同。我不明白为什么短语查询 "PowerShot-100 camera" 没有 return 任何东西。

这是架构

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="1" generateNumberParts="1" generateWordParts="1" catenateWords="1" splitOnCaseChange="1" stemEnglishPossessive="0" preserveOriginal="1" />
    <filter class="solr.LowerCaseFilterFactory" />

  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="1" generateNumberParts="1" generateWordParts="1" catenateWords="1" splitOnCaseChange="1" stemEnglishPossessive="0" preserveOriginal="1" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

试试这个字段类型应该可以解决你的问题。

<fieldType name="text_delimeter" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" preserveOriginal="1" catenateAll="1" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!--
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" preserveOriginal="1" catenateAll="0" splitOnCaseChange="0"/> 
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>