【发布时间】:2015-01-18 13:27:16
【问题描述】:
我正在为电子商务网站构建产品搜索引擎。
文档来自不同的来源,所以目前我无法修复它们。
我有一些这样的文档描述:
GOPRO CAMERA 32
GOPRO CAMERA 35
其他一些类似的:
GO-PRO BATTERY 1000
GO-PRO BATTERY 2000
最后还有其他类似的:
GO PRO CASE SLIM BLUE
GO PRO CASE SLIM RED
GO PRO CASE SLIM GREEN
描述字段的字段类型是“text_it”:
<fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
<filter class="solr.ItalianLightStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
<filter class="solr.ItalianLightStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>x
</analyzer>
</fieldType>
显然,当我提交 GO PRO 之类的查询时,我会从上面列出的三个组中的每一个中找到结果。
当我搜索 GOPRO 时,我只找到前两组的结果。我从分析表中知道,其原因是被索引的标记是:
GOPRO => GOPRO GO-PRO => 去,去,亲 GO PRO => 去,亲
对于 gopro 查询(不带空格)也与 GO PRO 产品(带空格)匹配,您有什么建议?
更新
我尝试在 LowerCaseFilter 之后将其添加到我的查询分析器中:
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" side="front" />
...对于我的用例,它可以工作:查询“gopro”生成 g,go,gop,gopr,gopro 令牌,就在这里。好的,但是现在所有其他查询结果都被破坏了! 查询“essential”的第一个结果是“dvd player es-124”,因为正在生成“es”令牌。
【问题讨论】:
标签: solr lucene search-engine information-retrieval