E站搜索:Solr不搜索以“e”结尾的单词(words ending in some)

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

当我搜索以“e”结尾的单词时,它总是不返回任何结果。

假设 DB 上有一条记录“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

任何想法??

非常感谢。

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

查询:query_string = ("%" + params [:nome] + "%").upcase produto_busca = Estoque::Produto.of (current_empresa).where ("nome LIKE?or est_produtos.nome_fantasia LIKE?",query_string,query_

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

2

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

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

包含-& gt;包含

组成-& gt;组成

构成-& gt;构成等...(参考http://snowball.tartarus.org/algorithms/english/stemmer.html)

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

语言:葡萄牙语

不是索引全文,只是一些单词。

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

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

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

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

希望这有帮助。。。

ps:有几种语言的 Stemming 版本。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(86)
Tred数据库:多租户数据库 vs多数据库(multitenant database)
上一篇
编程猫教材:数据挖掘教材(data mining the textbook)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(84条)