Xml 使用Drupal7和ApacheSolr3.x进行部分不敏感搜索
我正在Drupal7环境上配置基于ApacheSolr的搜索。 搜索正在使用ApacheSolr,并且正在工作,但不是以我想要的方式 当我输入类似“staff”的内容时,我希望得到类似“staff”、“Staffing”、“Staffing”的结果 我重新启动了apache服务器,清除了drupal缓存,清除了索引,并重新索引了所有内容,但它不起作用(我只有“staff”full word这样的结果) 所以,我更新了schema.xml以包含其他stackoverflow线程上建议的一些edgeNGramFilter,奇怪的是,我还有一个结果,其中包含“人员配置”。 但如果我点击“你的意思是‘人员配置’?”我会得到更多的‘人员配置’结果 有人能帮忙吗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
<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
-这将使您能够在空白上标记化小写过滤器工厂
匹配,使搜索不区分大小写SnowballPorterFilterFactory
在配置中,您需要测试词干李>
最后,根据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。