使用MongoDB 2.4进行词干分析和部分搜索

时间:2014-01-07 14:41:15

标签: ruby mongodb full-text-search mongoid partial

在MongoDB中进行全文搜索和部分搜索的正确方法是什么? 例如。挪威语“sokk”(袜子)。 当搜索“sokk”时,我想匹配“sokker”(袜子复数),“sokk”和“sokkepose”

搜索“sokker”应该匹配“sokk”和“sokker”。

我使用这个红宝石片段获得了想要的结果:

def self.search(q)
    result = []

    # Full text search first
    result << Ad.text_search(q).to_a   

    # Then search for parts of the word
    result << Ad.any_of({ title: /.*#{q}.*/i }, { description: /.*#{q}.*/i} ).to_a

    result.flatten!
    result.uniq
end

有什么建议吗? :)

干杯,

Martin Stabenfeldt

1 个答案:

答案 0 :(得分:1)

马丁,

一些建议/建议/更正:

  1. 2.4中的全文搜索不是生产就绪,不应在不知道正在进行权衡的情况下在生产中部署。您可以在 - http://docs.mongodb.org/manual/tutorial/enable-text-search/

  2. 找到更多详情
  3. 要使文本搜索生效,您需要在添加文档时为文档提供适当的语言(或2.6中的特定字段)。这样可以确保单词被适当地阻止,并且从索引该字段中删除已停用的单词。

  4. 在搜索特定字段时指定语言,以便适当地删除它并删除顶部单词以进行搜索并对结果进行适当排名。您可以在http://docs.mongodb.org/manual/reference/command/text/找到有关索引和搜索的更多详细信息。您还可以在该网页上看到MongoDB FTS支持的语言。

  5. 理想情况下,在进行全文搜索时,您不会使用正则表达式,而是指定您要查找的单词/字符串以及语言。