在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
答案 0 :(得分:1)
马丁,
一些建议/建议/更正:
2.4中的全文搜索不是生产就绪,不应在不知道正在进行权衡的情况下在生产中部署。您可以在 - http://docs.mongodb.org/manual/tutorial/enable-text-search/
要使文本搜索生效,您需要在添加文档时为文档提供适当的语言(或2.6中的特定字段)。这样可以确保单词被适当地阻止,并且从索引该字段中删除已停用的单词。
在搜索特定字段时指定语言,以便适当地删除它并删除顶部单词以进行搜索并对结果进行适当排名。您可以在http://docs.mongodb.org/manual/reference/command/text/找到有关索引和搜索的更多详细信息。您还可以在该网页上看到MongoDB FTS支持的语言。
理想情况下,在进行全文搜索时,您不会使用正则表达式,而是指定您要查找的单词/字符串以及语言。