Xml 使用Drupal7和ApacheSolr3.x进行部分不敏感搜索

Xml 使用Drupal7和ApacheSolr3.x进行部分不敏感搜索,xml,apache,search,solr,drupal-7,Xml,Apache,Search,Solr,Drupal 7,我正在Drupal7环境上配置基于ApacheSolr的搜索。 搜索正在使用ApacheSolr,并且正在工作,但不是以我想要的方式 当我输入类似“staff”的内容时,我希望得到类似“staff”、“Staffing”、“Staffing”的结果 我重新启动了apache服务器,清除了drupal缓存,清除了索引,并重新索引了所有内容,但它不起作用(我只有“staff”full word这样的结果) 所以,我更新了schema.xml以包含其他stackoverflow线程上建议的一些edge

我正在Drupal7环境上配置基于ApacheSolr的搜索。 搜索正在使用ApacheSolr,并且正在工作,但不是以我想要的方式

当我输入类似“staff”的内容时,我希望得到类似“staff”、“Staffing”、“Staffing”的结果

我重新启动了apache服务器,清除了drupal缓存,清除了索引,并重新索引了所有内容,但它不起作用(我只有“staff”full word这样的结果)

所以,我更新了schema.xml以包含其他stackoverflow线程上建议的一些edgeNGramFilter,奇怪的是,我还有一个结果,其中包含“人员配置”。 但如果我点击“你的意思是‘人员配置’?”我会得到更多的‘人员配置’结果

有人能帮忙吗

  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back" />    
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>  
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back" />    
  </analyzer>
</fieldType>

为什么配置如此复杂???有这么多过滤器??? 您可以一个接一个地尝试匹配各个条件

如果您想搜索“staff”,并希望搜索“staff”、“Staffing”、“estafing”等结果

  • WhitespaceTokenizerFactory
    -这将使您能够在空白上标记化
  • 用于将staff与staff have
    小写过滤器工厂
    匹配,使搜索不区分大小写
  • 要使staff与staffing相匹配,请检查词干分析器,它会将单词减少到词根。e、 g.
    SnowballPorterFilterFactory
    在配置中,您需要测试词干
  • 对于要设置匹配的人员,这只能由同义词过滤器处理。索引时间snonyms优先使用expand选项,因此不需要查询时间
    最后,根据Jayendra@Jayendra的评论,对于感兴趣的人来说,这是有效的:

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back" />    
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>         
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>  
      </analyzer>
    </fieldType>
    
    
    
    此配置是我从drupal附带的apache solr模块中获取的默认配置。由于搜索“部分”起作用,我的想法是编辑它以达到我的目标。不管怎样,我对solr还是比较陌生的,也许一个接一个的开始对你来说是个更好的主意。如果我在上述步骤中需要帮助,我将稍后询问您。thx.我不希望在查询时使用edgegrams。还要记住,顺序对于过滤很重要。SnowballPorterFilterFactory位于EdgeNGramFilterFactory之前,因此不会阻止estaffing。