Web Solr:在关键字中使用/不使用空格进行搜索
在关键字中引入空格时,我遇到了一个问题,例如:Web Solr:在关键字中使用/不使用空格进行搜索,web,search,solr,Web,Search,Solr,在关键字中引入空格时,我遇到了一个问题,例如: 我们有一款名为“Sony Playstation 4 Camera V2 PS4”的产品 (PSVR)” 搜索“playstation”或“playstation camera”将返回此产品 搜索“play station”或“play station camera”不会带回此产品(请注意 (空间) 以下是正在使用的字段类型: <fieldType name="text_en_splitting" cla
- 我们有一款名为“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”和“playstation”匹配?就我的例子而言,这仅限于PlayStation,但它可以出现在任何搜索词上,例如“赛博朋克”、“赛博朋克”。因此,需要大量手动操作的解决方案,例如为playstation=>playstation
添加同义词,是不可行的
我尝试过但没有成功的事情:
- N-GRAM过滤器和标记器
- 模糊搜索
- 删除空白
- 转义空白
<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"/>
<filter class="solr.ShingleFilterFactory"/>
</analyzer>
。。给定maxShingleSize=2
。如果您将最大大小增加到3,这也将为您提供playstationcamera
作为单个令牌(在本例中)。如果你有一些术语,人们可能会多次拆分一个单词,那么这可能是必要的
如果您假设您的术语被正确地编入索引,并且这仅在查询时才有必要,那么您的索引将不会更改,也不必重新编入索引(并且大小也不会更改)
您可能必须更改周围过滤器的位置;你的词干筛选将在神秘的地方打破这一点,因为你将连接以前的词干术语。你可以使用一个将多个标记组合成一个标记
<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"/>
<filter class="solr.ShingleFilterFactory"/>
</analyzer>
。。给定maxShingleSize=2
。如果您将最大大小增加到3,这也将为您提供playstationcamera
作为单个令牌(在本例中)。如果你有一些术语,人们可能会多次拆分一个单词,那么这可能是必要的
如果您假设您的术语被正确地编入索引,并且这仅在查询时才有必要,那么您的索引将不会更改,也不必重新编入索引(并且大小也不会更改)
您可能必须更改周围过滤器的位置;您的词干筛选将在神秘的地方打破这一点,因为您将连接以前的词干术语。谢谢您的帮助!这是迄今为止我尝试过的最有效的方法,再微调一下,它应该可以解决我的问题。谢谢你的帮助!这是迄今为止我尝试过的最有效的方法,再微调一下,它应该可以解决我的问题。