Apache solr 搜索问题
Apache solr search issue
我遇到了关于 apachesolr 的搜索问题。
例如
我索引的内容是:
- 提拉米苏提拉米苏
- 冬季丝绒
- 意大利蔬菜通心粉汤,
- 冰沙版hiver
当我搜索 "hiver" 时,我只得到 Smoothie version hiver 作为结果。
当我搜索 dhiver 时,我得到了结果
- 提拉米苏提拉米苏
- 冬季丝绒
- 蔬菜通心粉汤
无论是搜索 hiver 还是 dhiver 还是 dhiver,我都需要获得所有结果
有人知道问题出在哪里吗?我是否必须更改 schema.xml 中的某些内容?
我的文本字段架构是:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
splitOnCaseChange="1"
splitOnNumerics="1"
preserveOriginal="1"
/>
<filter class="solr.LengthFilterFactory" min="3" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="5"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
splitOnNumerics="1"
/>
<filter class="solr.LengthFilterFactory" min="3" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="multiterm">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
嗯嗯好吃。
首先,对于所有这些类型的问题,使用 Solr 分析工具是你的朋友。其次,请记住,Solr 仅在查询和术语是 100% 字符相同的字符时才匹配。
对于以下过滤器
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
Velouté d'hiver 将被分析为
丝绒 |冬日 | d |驱动器 |蜂巢
因此将匹配您对 hiver 的查询 - 您可能想要删除 | d |我的过滤器生成的令牌。
记得在某处折叠重音字符。
我遇到了关于 apachesolr 的搜索问题。
例如 我索引的内容是:
- 提拉米苏提拉米苏
- 冬季丝绒
- 意大利蔬菜通心粉汤,
- 冰沙版hiver
当我搜索 "hiver" 时,我只得到 Smoothie version hiver 作为结果。
当我搜索 dhiver 时,我得到了结果
- 提拉米苏提拉米苏
- 冬季丝绒
- 蔬菜通心粉汤
无论是搜索 hiver 还是 dhiver 还是 dhiver,我都需要获得所有结果
有人知道问题出在哪里吗?我是否必须更改 schema.xml 中的某些内容?
我的文本字段架构是:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
splitOnCaseChange="1"
splitOnNumerics="1"
preserveOriginal="1"
/>
<filter class="solr.LengthFilterFactory" min="3" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="5"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
splitOnNumerics="1"
/>
<filter class="solr.LengthFilterFactory" min="3" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="multiterm">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
嗯嗯好吃。
首先,对于所有这些类型的问题,使用 Solr 分析工具是你的朋友。其次,请记住,Solr 仅在查询和术语是 100% 字符相同的字符时才匹配。
对于以下过滤器
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
Velouté d'hiver 将被分析为
丝绒 |冬日 | d |驱动器 |蜂巢
因此将匹配您对 hiver 的查询 - 您可能想要删除 | d |我的过滤器生成的令牌。
记得在某处折叠重音字符。