您认为我的过滤器适合法语搜索吗?
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!--
in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!--
Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="French" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ElisionFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.SnowballPorterFilterFactory" language="French" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ElisionFilterFactory" />
</analyzer>
</fieldType>
我有一些问题,比如“electricitré”,当“electricite”返回9次出现时,会返回6次出现。
答案 0 :(得分:0)
pep8
和electricitré
不会给出相同的结果:我认为这是由于输入错误:electricite
而不是electricitré
没有 r ?
请记住,虽然SynonymFilter会很乐意使用 包含多个单词的同义词(即:“sea biscuit,sea biscit, seabiscuit“)处理同义词的推荐方法 这,是在索引时扩展同义词。这是因为那里 是查询时可能出现的两个潜在问题:
- 在提供任何文本之前,Lucene QueryParser会在空格上进行标记 到分析器,所以如果一个人搜索海biscit的话 分析仪将分别给出“海”和“biscit”字样 不会知道他们是同义词。
- 词组搜索(即:“海 biscit“)将导致QueryParser将整个字符串传递给 分析器,但如果SynonymFilter配置为扩展 同义词,然后当QueryParser获取结果的令牌列表时 从分析器返回,它将构建一个MultiPhraseQuery 没有达到预期的效果。这是因为机制有限 可用于分析器以指示两个术语占用相同的值 位置:没有办法表明“短语”占据了 与任期相同的立场。对于我们的例子,结果 MultiPhraseQuery将是“(海|海| seabiscuit)(饼干| biscit)“这与”seabiscuit“的简单案例不符 发生在文件中
醇>即使你不担心多字 同义词,idf差异仍然使索引时间同义词成为一个好主意。 请考虑以下情形:
- 带有“text”字段的索引,在查询时使用 SynonymFilter与同义词TV,Televesion和expand =“true”
- 许多 成千上万的文件包含“text:TV”一词
- 几百 包含“text:Television”一词的文件
查询文字:电视 将扩展为(文本:电视文本:电视)和较低的docFreq 文字:电视将提供与“电视”相匹配的文件 更高的分数然后与“电视”相匹配的文档 - 可能是 对客户来说有点直观。索引时间扩展(或 减少)将导致所有文件的idf相同,无论如何 包含原始文本的术语。
ElisionFilter
before WordDelimiterFilter
:注意:最好在WordDelimiterFilter之前使用ElisionFilter。这将阻止非常慢的短语查询。