Mongoose文本搜索 - 将其行为更改为AND操作会降低它的速度

时间:2016-10-06 04:46:38

标签: node.js mongodb search mongoose

我正在开发一个搜索功能,我必须在大约300,000个文档中执行搜索操作。 为此我创建了一个超过四个字段的复合索引,并且也给它们赋予了权重。默认情况下,如果我搜索具有多个单词的短语,则mongoose会搜索具有 OR 操作的所有关键字。例如: - 如果您搜索小细胞肺,那么mongoose将搜索其中任何一个可用的所有文档。 它工作得很快。

但我的要求是执行 AND 操作。为了实现这一点,我将短语中的所有单词拆分,然后将它们放在双引号中。因此,当用户搜索具有多个单词的短语时,对每个单词执行搜索操作为 AND 操作。例如: - 如果你搜索小细胞肺("小""细胞""肺")那么它应该找到所有那些文件所有都可用。它也在工作,但现在很慢。

有没有办法让它更快。 如果需要,我会分享代码。

由于

2 个答案:

答案 0 :(得分:1)

试一试

<div name="element-to-focus" data-ng-init="init()"></div>

现在上面的代码将执行以下操作

  

如果搜索字符串包含短语,则搜索执行AND   搜索字符串中的任何其他术语;例如搜索“\”吻我   “脸颊嘴唇”搜索“亲吻我”和(“cheecks”或“   “唇部”)。

您可以从这里阅读

Docs

答案 1 :(得分:0)

如果要匹配完整的短语,请将短语括在转义双引号中:

$('body').on('click', ".request-columns", function() {
  var $this = $(this);
  $this.toggleClass("checked-all");
  var checkedAll = $this.hasClass('checked-all');
  var text = checkedAll ? "Deselect All" : "Select All"; 
  $this.find("a").html(text);
  $this.parent().find(".column-check").each(function() {
    $(this).prop('checked', checkedAll); // note that this this, is a different this ;)
  });
});

另请参阅mongodb网站上的$text documentation