我如何摆脱“。”使用 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>
我有这段文字要标记化:
"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>