0

我正在drupal 7 环境中配置基于apache solr 的搜索。搜索正在使用 apache solr,并且正在工作,但不是我想要的方式。

当我输入诸如“员工”之类的内容时,我想要诸如“员工”、“员工”、“员工”之类的结果。

我重新启动了 apache 服务器,清除了 drupal 缓存,清除了索引,并重新索引了所有内容,但它不起作用(我只有“员工”全字之类的结果)。

所以,我更新了 schema.xml 以包含一些 edgeNGramFilter,正如其他 stackoverflow 线程上所建议的那样,这很奇怪,我还有 1 个结果,其中包含“人员配备”。但是如果我点击“你的意思是'人员配备'吗?”然后我会有更多的'人员配备'结果。

有人可以帮忙吗?

  <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>
4

2 回答 2

1

为什么配置这么复杂???有这么多过滤器???您可以一一开始尝试匹配个别条件。

如果您想搜索“员工”并想要“员工”、“员工”、“员工”等结果。

  1. WhitespaceTokenizerFactory- 这将使您能够在空白处进行标记
  2. 对于将员工与员工匹配,必须LowerCaseFilterFactory使搜索不区分大小写
  3. 要将人员与人员配置相匹配,请检查词干分析器,该词干分析器会将单词减少到词根。例如SnowballPorterFilterFactory,在配置中,您需要测试词干。
  4. 对于人员匹配,这只能通过同义词过滤器来处理。索引时间同义词首选扩展选项,因此不需要查询时间。
于 2013-09-09T10:46:18.700 回答
0

最后,对于感兴趣的人,根据 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>
于 2013-09-10T11:13:48.010 回答