Solr不搜索以“e”结尾的单词

时间:2014-08-28 15:18:33

标签: ruby-on-rails apache solr

我是索尔的新手,我面临着一个奇怪的问题。

当我搜索以“e”结尾的单词时,它始终不会返回任何结果。例如:

假设数据库上有“QWERTY”记录。 当搜索词是“QWERT”时,它返回记录“QWERTY”。 当搜索词为“QWERTY”时,它返回记录“QWERTY”。 (正确的)

假设DB上有一条记录“ABCDE”。 当搜索词是“ABCD”时,它返回记录“ABCDE”。 当搜索词是“ABCDE”时,它什么都不返回!!

我发现了一些与“solr忽略最后一封信”有关的问题以及类似的一些问题,但没有找到与此相关的内容。

我正在使用Solr 0。9。2。2(3年项目),Rails 3.2.2,Apache 2.2.22和Ubuntu 12.04 LTS

任何想法??

谢谢!

- Edit-- 架构: http://www.speedyshare.com/khdcr/schema.xml

查询: query_string =(“%”+ params [:nome] +“%”)。upcase     produto_busca = Estoque :: Produto.of(current_empresa).where(“nome LIKE?或est_produtos.nome_fantasia LIKE?”,query_string,query_string).order(“nome ASC”)

有几个查询存在同样的问题。这只是一个例子。

1 个答案:

答案 0 :(得分:2)

几周后,我找到了解决这个问题的方法。

Lucene Solr有一个名为Stemming的过滤器。此过滤器基本上捕获单词的“根”。它删除了一些字母,例如:

关于我的系统的关键点是:

  • 语言:葡萄牙语
  • 没有索引全文,只是一些单词。

解决方案是从Solr Schema中删除Stemming(solr / conf / schema.xml):

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type='index'>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

新代码基本上用“白色空格”分隔单词,将特殊字符更改为常规字符(á - &gt; a),将所有字母设置为小写字母(Aaa - &gt; aaa)并使用NGram过滤器(abc - &gt; ; ab bc abc ...)。

(参考文献:https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions

希望这会有所帮助......

Ps:有几种语言的词干版本。