Solr过滤器对它们好吗?

时间:2015-06-04 14:51:22

标签: xml solr

您认为我的过滤器适合法语搜索吗?

<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次出现。

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用Solr管理页面了解为什么pep8electricitré不会给出相同的结果:
  2.   

    http://exemple.com:8983/solr/#/yourCoreName/analysis?analysis.fieldvalue=electricit%C3%A9+electricite&analysis.query=electricit%C3%A9+electricite&analysis.fieldtype=text&verbose_output=1

    我认为这是由于输入错误:electricite而不是electricitré没有 r

    1. Solr advises to use synonyms at index time
    2.   

      请记住,虽然SynonymFilter会很乐意使用   包含多个单词的同义词(即:“sea biscuit,sea biscit,   seabiscuit“)处理同义词的推荐方法   这,是在索引时扩展同义词。这是因为那里   是查询时可能出现的两个潜在问题:

           
          
      1. 在提供任何文本之前,Lucene QueryParser会在空格上进行标记   到分析器,所以如果一个人搜索海biscit的话   分析仪将分别给出“海”和“biscit”字样   不会知道他们是同义词。
      2.   
      3. 词组搜索(即:“海   biscit“)将导致QueryParser将整个字符串传递给   分析器,但如果SynonymFilter配置为扩展   同义词,然后当QueryParser获取结果的令牌列表时   从分析器返回,它将构建一个MultiPhraseQuery   没有达到预期的效果。这是因为机制有限   可用于分析器以指示两个术语占用相同的值   位置:没有办法表明“短语”占据了   与任期相同的立场。对于我们的例子,结果   MultiPhraseQuery将是“(海|海| seabiscuit)(饼干|   biscit)“这与”seabiscuit“的简单案例不符   发生在文件中
      4.         

        即使你不担心多字   同义词,idf差异仍然使索引时间同义词成为一个好主意。   请考虑以下情形:

             
            
        • 带有“text”字段的索引,在查询时使用   SynonymFilter与同义词TV,Televesion和expand =“true”
        •   
        • 许多   成千上万的文件包含“text:TV”一词
        •   
        • 几百   包含“text:Television”一词的文件
        •   
             

        查询文字:电视   将扩展为(文本:电视文本:电视)和较低的docFreq   文字:电视将提供与“电视”相匹配的文件   更高的分数然后与“电视”相匹配的文档 - 可能是   对客户来说有点直观。索引时间扩展(或   减少)将导致所有文件的idf相同,无论如何   包含原始文本的术语。

      1. Solr advises to use the ElisionFilter before WordDelimiterFilter
      2.   

        注意:最好在WordDelimiterFilter之前使用ElisionFilter。这将阻止非常慢的短语查询。