如何使用带有AWS CloudSearch的结构化前缀运算符进行通配符搜索

时间:2015-08-12 16:16:38

标签: amazon-web-services search-engine amazon-cloudsearch

我目前正在迁移到2013 Cloudsearch API(来自2011 API)。以前,我一直在搜索中使用通配符前缀,如下所示:

bq=(and 'first secon*')  

我的查询有时包括构面选项,这就是我使用布尔查询语法而不是简单版本的原因。

我使用2013引擎创建了一个新的cloudsearch实例并将其编入索引。 bq参数现已消失,因此我必须将q参数与q.parser=structured参数一起使用才能获得相同的功能。当我用这样的东西查询时:

q.parser=simple&q=first secon*

......我收到了大量的结果。但当我查询时:

q.parser=structured&q=(prefix 'first secon')

......我没有点击。我没有收到错误,只是没有找到结果。难道我做错了什么?

我刚刚意识到,如果我使用2013 API对单词firs进行前缀搜索,则前缀搜索似乎正常。但是,如果我在查询中只有一个单词,例如first secon然后前缀搜索不起作用。那么如何使用结构化前缀运算符完成?

2 个答案:

答案 0 :(得分:5)

您需要为每个单独的查询字词指定前缀运算符,例如:

q=(or (prefix 'firs') (prefix 'secon'))&q.parser=structured

答案 1 :(得分:0)

如果有人在寻找JS代码来解决此问题。您需要做的是在空间上分割用户输入,并将其存储在数组中。将您要查询的单词与管道一起加入。

// own custom jQuery function
$.fn.isInViewportWithMargin = function(px) {
  let elementTop = $(this).offset().top - px;
  let elementBottom = elementTop + ( $(this).outerHeight() + px*2 );
  let viewportTop = $(window).scrollTop();
  let viewportBottom = viewportTop + $(window).height();
  return elementBottom > viewportTop && elementTop < viewportBottom;
};

$(window).scroll(function() {
  if ($('#main-header').isInViewportWithMargin(160)) {
    $('#main-menu').removeClass('hide');
  } else {
    $('#main-menu').addClass('hide');
  }
});