mongodb - MeteorJS - MongoDB - 为什么全文搜索只返回完全匹配?

标签 mongodb meteor full-text-search

我正在使用与 MongoDB 相关联的 MeteorJS 创建一个全文搜索 功能,我所做的是按照此处的步骤操作:http://meteorpedia.com/read/Fulltext_search ,我的搜索功能现在有点“工作”了。

以下是我的一些重要代码:

server/zip-index.js 文件:

Meteor.startup(function () {
    var search_index_name = 'my_search_index';
    // Remove old indexes as you can only have one text index and if you add
    // more fields to your index then you will need to recreate it.
    Zips._dropIndex(search_index_name);

    Zips._ensureIndex({
        city: 'text',
        state: 'text'
    }, {
        name: 'my_search_index'
    });
});

server/lib/search_zips.js 文件

var _searchZips = function (searchText) {
    var Future = Npm.require('fibers/future');
    var future = new Future();
    MongoInternals.defaultRemoteCollectionDriver().mongo.db.executeDbCommand({
            text: 'zips',
            search: searchText,
            project: {
                id: 1 // Only return the ids
            }
        }
        , function(error, results) {
            if (results && results.documents[0].ok === 1) {
                var x = results.documents[0].results;
                future.return(x);
            }
            else {
                future.return('');
            }
        });
    return future.wait();
};

现在的问题是:比方说,我有一个文档,其中包含 name = Washington, state = DC

然后,当我提交搜索 key = "Washington" 时,它会返回所有带有 name = Washington 的文档;但是当我只提交搜索 key = "Washing" 时,它什么也没有返回!

所以我怀疑 MongoDB 的全文搜索 是否要求搜索键与文档的字段值完全相同?你们能不能帮我改进我的搜索功能,让它仍然使用 MongoDB 的全文搜索,但如果我提交不完整的搜索键,它能够返回文档事件?

我已经坚持了好几个小时了。希望你们能帮忙。非常感谢你!

最佳答案

MongoDB full text search通过将所有字符串拆分为单个单词(使用一些基于索引语言的词干提取)来工作。这意味着您只能搜索完整的词,不能进行任何模糊搜索。

当你想搜索分词时,可以search with a regular expression .但请记住,正则表达式不能使用文本索引(但在某些情况下,当正则表达式以字符串开头 (^) 标记开头时,它们可以有限地使用普通索引) .

例如,查询 db.Zips.find({ name:/^Washing/} 将查找名称以 "Washing" 开头的所有文档并将受益来自 { name: 1 } 上的索引。您还可以使用 db.Zips.find({ name:/DC/} 查找名称包含 "DC" 任何地方,但它不会从任何索引中受益,并且需要执行完整的集合扫描。

当您需要更高级的文本搜索功能时,您应该考虑将 MongoDB 与专门的解决方案配对,例如 Lucene .

关于mongodb - MeteorJS - MongoDB - 为什么全文搜索只返回完全匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27888292/

相关文章:

SQL Server CONTAINSTABLE 不适用于单个数字

mongodb - 更改 MongoDB 集合的主键

java - 如何对 mongodb 数组字段进行全文搜索?

python - 如何在 python 字典上使用 $push/$addToSet mongodb 更新修饰符

javascript - Meteorjs Javascript 文件未执行(需要刷新)

sql-server - 将数据库升级到 Azure SQL V12 并启用全文搜索后,使用 SSMS 导入和导出 bacpac 文件时出现问题

python - pre_save 在 mongoengine update_one 中不起作用

html - 应用 Bootstrap 后,导航栏的下拉菜单在 meteor 中不起作用

javascript - 在 Meteor 发布中通过 id 链接用户

php - 如何改进全文搜索的 mysql 查询?