【发布时间】:2020-12-04 15:19:48
【问题描述】:
在关键字中引入空格时遇到问题,例如:
-
我们有一个标题为“Sony Playstation 4 Camera V2 PS4”的产品 (PSVR)”
-
搜索“playstation”或“playstation camera”会返回此产品
-
搜索“play station”或“play station camera”不会带回该产品(注意 空间)
这里是使用的字段类型:
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我该如何解决这个问题,让“playstation”和“play station”都匹配?在我的示例中,这仅限于 PlayStation,但它可能发生在任何搜索词上,例如“赛博朋克”、“赛博朋克”。因此,需要大量手动工作的解决方案(例如添加 play station => playstation 的同义词)是不可行的。
我尝试过但没有成功的事情:
- N-GRAM 过滤器和标记器
- 模糊搜索
- 删除空格
- 转义空格
【问题讨论】: