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

问题描述 投票:0回答:3

我目前已迁移到 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
那么前缀搜索不起作用。那么,这是如何使用结构化前缀运算符来完成的呢?

amazon-web-services search-engine amazon-cloudsearch
3个回答
8
投票

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

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


0
投票

如果有人寻找 JS 代码来解决这个问题。您需要做的是将用户输入拆分为空间,并将它们存储在数组中。将要查询的单词用管道连接起来。

      var params = {
        query: ''
      };

      //Check for spaces
      let words = query.split(' ');
      let chunks = [];
      words.forEach(word => {
        chunks.push(`${word}* | ${word}`);
      })

      params.query = chunks.join(' | ');

      cloudsearch.search(params, function(err, data) {
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      });

0
投票
q.parser=structured&q=(and (phrase 'first') (prefix 'secon'))

你可以这样尝试。 短语,确认必须有。和 前缀*

© www.soinside.com 2019 - 2024. All rights reserved.